cvLoadImage返回NULL

时间:2012-09-14 05:58:55

标签: c++ image-processing opencv eclipse-cdt ubuntu-12.04

我在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图像但遇到了同样的问题。请稍后告诉我是否有人遇到类似的问题。 提前致谢

4 个答案:

答案 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文件的文件夹中。

但是如果从终端执行程序,则图像文件应与可执行文件位于同一文件夹中。

您也可以使用直接路径来解决冲突。