C++中的openCV Mat访问冲突

openCV Mat access violation in C++

本文关键字:访问冲突 Mat openCV 中的 C++      更新时间:2023-10-16

我得到了"在….exe:0xC0000005:访问违规读取位置0x0000023339631FB8中的0x00007FFF428944E0(opencv_world343d.dll(处抛出的异常。"我读过一些"访问违规读取位置"的帖子和主题,但我认为我正确分配和初始化了内存,这似乎是最常见的问题。

我的代码包含一个"loadfits"函数,它加载一个16位灰度图片并将其存储在openCV cv::Mat中。函数可以工作——就在return语句之前的末尾,我可以显示或保存图像,函数内部的一切都很完美。但当我尝试访问和使用main((中的cv::Mat时,我会收到访问冲突错误。

#define DFTtypeCV CV_64FC1
#define PICtypeCV CV_16UC1  //16bit grayscale image
Mat loadfits(std::string path)
{
ifstream streamIN(path, ios::binary | ios::in);
vector<char> celyobraz_8(fitsSize*fitsSize * 2, 0);
streamIN.read(&celyobraz_8[0], fitsSize*fitsSize * 2);
... //some code
Mat fits_PICTURE_Mat = Mat(fitsSize, fitsSize, PICtypeCV, &celyobraz_8[0], Mat::AUTO_STEP);
showimg(fits_PICTURE_Mat, "fitsRaw"); //shows the correct image
return fits_PICTURE_Mat;    //returns the same image
}

然后我使用这个函数初始化并使用main((中的cv::Mat

Mat picZERO(fitsSize, fitsSize, PICtypeCV);
Mat picZEROd(fitsSize, fitsSize, DFTtypeCV);
picZERO = loadfits(path);
picZERO.convertTo(picZEROd, DFTtypeCV); //I get the error here

我以为我可以很容易地解决这个错误,因为我在函数返回语句之前就有正确的数据,但似乎无法解决。

有什么想法吗?谢谢

也有同样的问题。在我的案例中,解决方案是在发布配置中删除指向opencv_world3343d.dll的链接。此文件仅用于调试模式。

(最初,我按照这个指示http://shailendra.me/tutorial/add-opencv-to-visual-studio-c++-项目/(