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

Posted

技术标签:

【中文标题】无法使用 opencv2.3 imread 读取图像【英文标题】:Can not read image with opencv2.3 imread 【发布时间】:2011-08-10 12:58:08 【问题描述】:

您好,我正在尝试使用 opencv 的 imread 函数读取图像,如链接 (http://opencv.itseez.com/doc/tutorials/introduction/display_image/display_image.html#display-image)。我有带有 64 位 Windows 7 的 VS2010。每次尝试时都会收到错误消息“无图像数据”,但是我要读取的图像与代码位于同一文件夹中。有人可以帮我如何使用 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;

【问题讨论】:

如果您觉得答案有帮助,请务必接受。 【参考方案1】:

你可以使用加载图像

IplImage *img=cvLoadImage("Image_Name);

然后你可以将它转换成 cv::Mat 使用,

Mat mat(img);

【讨论】:

【参考方案2】:

我在使用 VS2005 和 OpenCV 2.3 的 WinXP 上遇到了同样的问题。 OpenCV 的 C++ 接口似乎不适用于 Windows。我也遇到了imread() 的问题,它返回了NULL 数据。

我改用 OpenCV 的 C 接口 解决了这个问题。欲了解更多信息,请查看Reading and Writing Images and Video。

【讨论】:

我在使用 C++ OpenCV 2.4 接口和 Visual Studio 2010 时遇到了同样的问题。我正在将代码从我的 MAC(接口没有问题)移植到 Windows。除了将我的所有代码转换为使用 C 接口之外,还有什么解决方法吗? 我遇到了这个***.com/questions/10901905/…,它提到在为链接器添加依赖项时使用更新的库 *d.lib。我试过它似乎有效。不确定一般情况是否如此。【参考方案3】:

我遇到了和你一样的问题。 OpenCV2.3 的 C++ 接口 不起作用,某些功能必须转换为 C 版本。 但最后,我发现了**的问题。 那是因为你用 CMake 编译 OpenCV 源代码时的项目属性与你当前的项目属性不一样。(可能是你的 OpenCV 的 dll 和 libs 是从互联网上下载的,这些可能与其他奇怪的属性一起编译。) 所以我检查了我的 CMake 生成的 OpenCV 源代码项目,我发现了 project propertyC/C++-->Code GenerationRuntime Library多线程调试 DLL(/MDd)。 然后,我在我当前的项目中更改了相应的属性,我的项目运行良好。同时针对OpenCV的其他C++接口的bug也得到了很好的解决。

【讨论】:

谢谢!你救了我的命。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

在视觉工作室 2010 中: 转到项目 --> 属性 --> 字符集 --> 使用多字节而不是 unicode。

【讨论】:

【参考方案7】:

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

【讨论】:

CLR 如何帮助处理原生库?

以上是关于无法使用 opencv2.3 imread 读取图像的主要内容,如果未能解决你的问题,请参考以下文章

opencv 2.3.* imread 不工作

MATLAB函数imread无法读取图像数据!

给我一个实例,Matlab中用imread函数读取一个图像,求详细步骤

ImportError: numpy.core.multiarray 导入失败 & 无法读取 cv.imread()

opencv入门基础——图像读取,图像显示,图像保存

Opencv imread 不能正常读取