2012-09-14 65 views
0

我正在使用eclipse ide上的OpenCV版本2.4.1的Ubuntu 12.04,32位平臺。即使將圖像放置在具有cpp文件的項目的當前位置後,cvLoadImage()函數也會返回NULL值。cvLoadImage返回NULL

#include "highgui.h" 
#include<iostream> 
using namespace std; 
int main(int argc, char** argv) 
{ 
    char image[80]="baboon.jpg"; 
    IplImage* img = cvLoadImage(image,CV_LOAD_IMAGE_COLOR); 
    cout<<img<<endl; 
} 

以下是我的包含文件目錄:

-I在/ usr /本地/包括/ OpenCV的-I在/ usr /本地/包括

繼是庫文件:

/usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_contrib.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so 在/ usr/local/lib目錄/ libopencv_flann.so /usr/local/lib/libopencv_gpu.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_legacy.so 在/ usr /本地/lib/libopencv_ml.so /usr/local/lib/libopencv_nonfree.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_stitching.so/usr/local/lib/libopencv_ts.so /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videostab.so

我的IMG值始終爲零(NULL)。我沒有得到任何編譯errors.I檢查了論壇帖子相似,但沒有一個人能解決我的疑難問題。即使有一個PNG圖像嘗試,但面臨着同樣的issue.Kindly我們知道,如果有人之前遇到類似的問題。 在此先感謝

+1

我想運營商<<沒有爲IplImage定義,這是來自OpenCV v1的舊C結構。另外,如果不明確釋放內存,則會使用IplImage發生內存泄漏。使用C++接口,看到我的回答如下 – remi

回答

2

您是否試圖給出圖像文件的完整路徑?如果沒有,請確保該映像文件位於具有可執行文件的文件夾中(某些IDE具有用於調試和發佈的單獨文件夾)。

+0

非常感謝你Fico。,當我把圖像文件放在exe文件的調試文件夾中,並給了cvLoadImage()函數的完整路徑。它開始工作正常,但我曾工作與之前在Windows平臺上的opencv和那裏我把圖像文件放在我有源文件的文件夾。請你告訴我,如果這是一個IDE specfic或操作系統特定的問題?此外,這是否意味着每次我應該給圖像文件的完整路徑?..再次感謝:) –

0

由於您使用的是相當近期的OpenCV的版本,我建議你使用較新的C++接口,用於圖像(CV :: MAT)和讀功能。

運營商< <是否適用於IplImage?我不這麼認爲,這可能是編譯錯誤的原因。

在新界面中,您的代碼將看起來像:

#include <cstdlib> 
#include<iostream> 
#include <string> 
#include <opencv2/highgui/higui.hpp> 

using namespace std; 
int main(int argc, char** argv) 
{ 
    const std::string imageName = "baboon.jpg"; 
    cv::Mat img = cv::imread(image,CV_LOAD_IMAGE_COLOR); 
    cout<<img<<endl; 
    return EXIT_SUCCESS; 
} 
+0

嗨remi,我沒有收到任何編譯錯誤,img只是一個指針變量,它包含地址,所以它應該打印的位置的地址。現在它似乎工作正常now.Iow仍然感謝您的嘗試:) –

+0

我讀「我得到一個編譯錯誤」,而不是「沒有得到任何」:)仍然,你有內存泄漏!你可以傳遞你的圖像名稱作爲命令行參數(argv [1]) – remi

+0

Ya Remi,我曾經參與了空值返回值,忘記考慮內存泄漏。 :) –

0

如果從直接日食中運行的程序,圖像應位於具有.cpp文件的文件夾中。

但如果從終端執行程序,圖像文件應與可執行文件相同的文件夾。

也可以使用直接路徑來解決衝突。

+0

那就是我所做的,當我把它放在cpp文件夾中時,程序沒有找到圖像,但是當我把它粘貼到調試文件夾中時,它運行的很好!我仍然不明白爲什麼它會發生。你有什麼線索嗎? –

1

我是新來的OpenCV也一樣,但我認爲,這裏的cout '< < 'IMG' < <' ENDL;您正在打印指針的值,即存儲在「img」中的地址。這裏是我使用的一個例子,它的工作原理如下:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    Mat image; // new blank image 
    image = imread("lena.bmp", 0);// reads the image file (I put the image in the same project's directory). 
    namedWindow("My Loaded Image", CV_WINDOW_AUTOSIZE);// creates a window for display. 
    imshow("Display window",image);// shows the image inside it. 
    waitKey(0);// wait for a keystroke in the window (When you don't do this, the image disappears instantly). 
    return 0; 
}