1、问题描述

0x00007FF98F394F69 处(位于 OpenCVTest.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x0000003898FBEC70 处。

[ WARN:0@0.111] global c:\build\master_winpack-build-win64-vc15\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_(‘

C:\Users\Administrator\source\repos\OpenCVTest\x64\Debug\OpenCVTest.exe (进程 11492)已退出,代码为 -1。

2、原因分析

1.路径出错:这里的imread函数的路径为双斜杠、或单反斜杠,或在斜杠前加r(注:python中可以,C++中未测试过),不必非要放在解决方案路径下。

项目同目录下为:Mat src = imread(“02.jpg”);

或非项目同目录下,需绝对路径: Mat src = imread(“C:\\02.jpg”);

或非项目同目录下,需绝对路径: Mat src = imread(r”C:\02.jpg”);

或非项目同目录下,需绝对路径: Mat src = imread(“C:/02.jpg”);

2.这也是最难发现的原因,即opencv_world460.lib、opencv_world460d.lib配置错误:

Debug、X64模式下,不能opencv_world460.lib、opencv_world460d.lib两个都填进去,否则容易出错,这里说容易出错的原因是因为谁排在前面,VS先识别谁,opencv_world460.lib对应Release配置,opencv_world460d.lib对应Debug配置,这里opencv_world460.lib排在最前面,先识别,和Debug、X64模式冲突,所以导致上述错误!

解决方法:

要么用Debug、X64和opencv_world460d.lib,

要么用Release、X64和opencv_world460.lib,

只用一个,保证不发生错误

这里笔者用Debug、X64和opencv_world460d.lib,

测试代码如下:

#include
#include
#include
#include
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
//注意:图片文件放置在工程当前目录下
Mat src = imread(“02.jpg”);
if (src.empty())
{
cout << "could not load image…" << endl;
return -1;
}
namedWindow(“Test opencv setup”, 100);
imshow(“test opencv setup”, src);
waitKey(0);
destroyAllWindows();
return 0;
}

重新生成:

Debug运行,成功显示输出测试图片。(注:测试图片为OpenCV开发帮助文档图片)