OpenCV未处理的异常错误

OpenCV unhandled exception error

本文关键字:错误 异常 未处理 OpenCV      更新时间:2023-10-16

我正在运行使用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:执行位置0x000000000000000的访问冲突。好像什么都没装。我检查了文件的目录,它似乎是正确的。我不确定问题出在哪里。

问题可能出现在链接的DLL中。请确保使用正确的DLL——发布版本使用发布DLL,调试版本使用调试DLL。这是一个很常见的错误,所以我建议你先看看。第二,正如评论和@1nflktd的回复中所提到的,你也试图在终端中打印你的图像 首先,我不认为这确实是库中定义的,其次,我真的不认为这样做有什么意义(<-似乎我错了-新的C++接口允许直接打印cv::Mat)。如果您想打印图像的属性,您可以使用cv::Mat::row、cv::Mat::col等(请参阅此处,或者只需编写img.[TRIGGER AUTOCOMPLETE]即可获得cv::Mat对象中可以访问的所有内容)。如果你真的想打印图像的数据(像素阵列),你需要调用cv::Mat::data,并在需要时进行相应的投射。不过要小心,因为你会得到大量的值。10x10图像的像素阵列中有100个值,100x100有10000个值,1000x1000有1000000个值。

如果DLL正常,请尝试执行以下操作:

  1. 使用Mat img(X,Y,CV_XXXX,Scalar(...))生成图像,其中XY是图像的维度,CV_XXXX为用于存储像素数据的存储单元(例如CV_32FC2),标量(…)表示要用于图像中所有像素的每个颜色通道的值
  2. 尝试显示生成的图像。不久前,我在使用OpenCV的Windows中遇到了一次糟糕的经历,因为我在Visual Studio中删除了stdafx.h,导致我传递给cv::imread(…)函数的字符串被错误解释。这是我过去真正了解问题来源的方式。如果你在Windows机器上工作,并且有这个问题,这也是一个很好的地方。如果程序生成的图像确实加载并正确显示,那么这可能就是问题所在(如果你删除了上面提到的标题)

如果您想显示您的图像,只需使用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;

有关更多信息,请参阅文档