无法使用opencv2.3 imread读取图像

时间:2011-08-10 12:58:09

标签: c++ visual-studio-2010 opencv

您好我正在尝试使用opencv的imread函数来读取图像,如链接(http://opencv.itseez.com/doc/tutorials/introduction/display_image/display_image.html#display-image)。我有VS2010与64位Windows 7.每次我尝试我收到错误消息“没有图像数据”,但我想要读取的图像与代码在同一个文件夹中。有人可以帮我看看如何读取具有imread功能的图像?我的代码如下:

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
    Mat image;  
    image = imread("al.jpg");
    if(argc != 2 || !image.data )
    {
        printf("no image data \n");
        return -1;
    }
    namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

7 个答案:

答案 0 :(得分:5)

您可以使用

加载图片
IplImage *img=cvLoadImage("Image_Name);

然后你可以使用

将其转换为cv :: Mat
Mat mat(img);

答案 1 :(得分:2)

我在VSX5和 OpenCV 2.3 的WinXP上遇到了同样的问题。似乎OpenCV的C ++接口在Windows上运行不佳。我也遇到了imread()的问题,该问题返回了NULL个数据。

我使用OpenCV的 C接口来解决问题。有关详情,请查看Reading and Writing Images and Video

答案 2 :(得分:0)

取出argc != 2测试。你没有使用传递给你的程序的参数,所以它是多余的。如果argc实际上不是eaual到2,那么您的程序在进入!image.data测试之前就会终止。

编辑:我只看了你链接的代码示例。它加载一个图像,其名称在命令行上传递给程序。这就是argc != 2测试的原因。你肯定想要解决这个问题,因为你很可能没有在命令行上传递文件名,所以你的argc是1,因此测试总是会失败。

答案 3 :(得分:0)

OpenCV支持图像格式Windows位图(bmp),可移植图像格式(pbm,pgm,ppm)和Sun栅格(sr,ras)。

答案 4 :(得分:0)

我遇到同样的问题,这可能来自VS 10中的VS项目编译。

在visual studio 2010中: 转到项目 - &gt;属性 - &gt;字符集 - &gt;使用多字节而不是unicode。

答案 5 :(得分:0)

我遇到了和你一样的问题。 OpenCV2.3的 C ++接口不起作用,某些功能必须转换为C版本。
但最后,我发现了**的问题 这是因为使用CMake 编译OpenCV源代码时的项目属性与您当前的项目属性不同。(可能是您的OpenCV&#39; sll和libs是从Internet下载的,这些可能与其他奇怪的属性编译。)
所以我检查了我的CMake生成的OpenCV源代码项目,我找到了项目属性 C / C ++ - &gt;代码生成运行时库 多线程调试DLL(/ MDd) 然后,我更改了当前项目中的相应属性,我的项目运行良好。同时,OpenCV错误的其他C ++接口也很好地解决了。

答案 6 :(得分:-1)

在Visual C ++中设置公共语言运行时支持(/ clr)。 它有效。