无法使用 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 property 、C/C++-->Code Generation、Runtime 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 读取图像的主要内容,如果未能解决你的问题,请参考以下文章
给我一个实例,Matlab中用imread函数读取一个图像,求详细步骤