OpenCV未处理的异常错误

时间:2015-02-19 17:07:04

标签: c++ opencv

我正在运行我正在使用opencv函数imread()和数据结构Mat的代码。

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int main(){
    int x;
    Mat img = imread("D:/OwnResearch/photo2.jpg");
    std::cout << img << std::endl;
    std::cin >> x;
    return 0;


}

我一直在opencvtest.exe中的0x0000000000000000处收到错误未处理的异常:0xC0000005:访问冲突执行位置0x0000000000000000。似乎没有任何东西被加载。我检查了文件的目录,似乎是正确的。我不确定问题是什么。

2 个答案:

答案 0 :(得分:1)

问题可能出在您要链接的DLL中。确保使用正确的版本 - 发布版本的dll和调试版本的dll。这是一个非常常见的错误,所以我建议你先看一下。第二个是在评论和@ 1nflktd的回复中提到的,你也试图在终端中打印你的图像。 首先,我不认为这确实是在图书馆中定义的,其次我并没有真正看到这样做的重点(&lt; - 看起来我错了 - {{ 3}})。如果要打印图像的属性,可以使用cv :: Mat :: row,cv :: Mat :: col等(请参阅the new C++ interface allows printing a cv::Mat directly或只需编写img.[TRIGGER AUTOCOMPLETE]即可获得所有可以使用的内容访问cv :: Mat对象)。如果你真的想要打印图像的数据(像素数组),你需要调用cv :: Mat :: data并根据需要进行相应的转换。但要小心,因为你会获得大量的价值观。 10x10图像有100个值,100x100有10000个值,1000x1000像素阵列有1000000个值。

如果DLL没问题,请尝试执行以下操作:

  1. 使用Mat img(X,Y,CV_XXXX,Scalar(...))生成图像,其中 X Y 是图像的尺寸, CV_XXXX 是内存单位用于存储像素数据(例如CV_32FC2),标量(...)表示要用于图像中所有像素的每个颜色通道的值。
  2. 尝试显示生成的图像。很久以前,我在使用OpenCV的Windows体验不佳,因为我在Visual Studio中删除了 stdafx.h ,导致对我传递给 cv :: imread(...)功能。这就是我过去常常看到问题来自哪里的方式。如果您正在使用Windows计算机并遇到此问题,这也是一个好看的地方。如果程序生成的图像确实加载并且显示正确,那么这可能就是问题(如果您删除了上面提到的标题)。

答案 1 :(得分:0)

如果您想显示图片,只需使用imgshow

即可
Mat img = imread("D:/OwnResearch/photo2.jpg"); 
if(!img.data) // check if it is loaded
{
    cout <<  "Could not open or find the image" << std::endl ;
    return -1;
}

namedWindow("TestWindow", WINDOW_AUTOSIZE); // Create a window for display.
imshow("TestWindow", img); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;

For more information see the docs