10

我想在 openCV 中使用 Mat 加载图像

我的代码是:

Mat I = imread("C:/images/apple.jpg", 0);
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", I ); 

我在消息框中收到以下错误:

Unhandled exception at 0x70270149 in matching.exe: 0xC0000005: Access violation 
reading location 0xcccccccc.

请注意,我包括:

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <iostream>
#include <math.h>
4

5 回答 5

12

我之前已经讲过很多次了,我想再做一遍也没有意义,但是代码防御性:如果方法/函数调用可能失败,请确保您知道它何时发生:

Mat I = imread("C:\\images\\apple.jpg", 0);
if (I.empty())
{
    std::cout << "!!! Failed imread(): image not found" << std::endl;
    // don't let the execution continue, else imshow() will crash.
}

namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", I ); 
waitKey(0);

请注意,Windows 的路径使用反斜杠而不是*nix 系统上使用\的标准。/传递文件名时需要转义反斜杠:C:\\images\\apple.jpg

waitKey()如果您使用 ,则必须调用imshow()

编辑

如果cv::imread()是抛出异常,我知道唯一可行的解​​决方案是下载 OpenCV 源代码并将其构建在机器上,因为重新安装 OpenCV 并不能解决问题。

于 2013-04-19T17:09:09.000 回答
2

你有没有在imread之后检查我是否存在?也许文件读取失败

读取文件后if ( I.empty() )检查它是否失败

于 2013-04-19T16:42:55.623 回答
2

我不知道你为什么没有包含问题,因为通常它是 .hpp 文件,所以你应该这样做

#include <opencv2/highgui/highgui.hpp>
#include <opencv2\core\eigen.hpp>

但是您的代码看起来不错,但是cv::waitKey(0);在您的 imshow 之后添加了一个。

于 2013-04-19T16:43:09.710 回答
0

您是否使用 Visual Studio 2010 运行 OpenCV 代码?如果是这样,请尝试在 Release 模式下编译。

于 2013-05-09T09:44:30.370 回答
0

正如@karlphillip 所指出的那样,无论听起来多么微不足道,但这条语句“您需要在传递文件名时转义反斜杠:C:\images\apple.jpg”非常重要。

于 2019-11-16T05:57:40.973 回答