0

我在 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

4 回答 4

2

您是否尝试提供图像文件的完整路径?如果没有,请确保映像文件位于包含可执行文件的文件夹中(某些 IDE 有一个单独的文件夹用于调试和发布)。

于 2012-09-14T07:31:41.127 回答
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;
}
于 2013-12-25T09:43:43.043 回答
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;
}
于 2012-09-14T08:25:21.340 回答
0

如果您直接在 Eclipse 中运行程序,则图像应位于具有 .cpp 文件的文件夹中。

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

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

于 2012-09-14T13:22:13.293 回答