我在eclipse ide上使用OpenCV版本2.4.1开发Ubuntu 12.04,32位平台。即使将图像放在我拥有cpp文件的项目的当前位置之后,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 / local / include / opencv -I / usr / local / include
和
以下是库文件:
/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/local/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)。我没有收到任何编译错误。我在论坛上检查了类似的帖子,但没有一个能解决我的问题。我甚至尝试过使用PNG图像但遇到了同样的问题。请稍后告诉我是否有人遇到类似的问题。 提前致谢
答案 0 :(得分:2)
您是否尝试提供图像文件的完整路径?如果没有,请确保图像文件位于包含可执行文件的文件夹中(某些IDE具有用于调试和发布的单独文件夹)。
答案 1 :(得分:1)
我也是OpenCV的新手,但我认为这里是cout'&lt;&lt;'img'&lt;&lt;'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;
}
答案 2 :(得分:0)
由于您使用的是最新版本的OpenCV,我建议您使用较新的C ++接口进行图像(cv :: Mat)和阅读功能。
运营商是否&lt;&lt;甚至可用于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;
}
答案 3 :(得分:0)
如果您是直接在eclipse中运行程序,则该图像应位于具有.cpp文件的文件夹中。
但是如果从终端执行程序,则图像文件应与可执行文件位于同一文件夹中。
您也可以使用直接路径来解决冲突。