我正在运行我正在使用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。似乎没有任何东西被加载。我检查了文件的目录,似乎是正确的。我不确定问题是什么。
答案 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没问题,请尝试执行以下操作:
Mat img(X,Y,CV_XXXX,Scalar(...))
生成图像,其中 X 和 Y 是图像的尺寸, CV_XXXX 是内存单位用于存储像素数据(例如CV_32FC2),标量(...)表示要用于图像中所有像素的每个颜色通道的值。答案 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;