快捷搜索: 王者荣耀 脱发

OpenCV报错之 Microsoft C++ 异常: cv::Exception

最近开始学习opencv,之前配置的2.4.9版本觉得太老,错误又多,所以重新配置了一个新的版本VS2015+OpenCV3.2.0,使用的64位,可能会遇上不少问题,希望在此记录自己的错误,与君共勉。

“Microsoft C++ 异常: cv::Exception,位于内存位置0x000000C388AFF030 处”是opencv中常见的问题之一了,在刚配置过程中很常见,我刚配置好后就遇到了。

报错程序

测试的程序是OpenCV3编程入门一书中的3.1.9 综合示例程序:图像的载入、显示与输出。

错误描述

代码与测试图片都是与书上一致的,但是还是出错了,错误如下:

解决方法

在网上查了130遍,有说是图片路径格式问题,有说是环境变量配置的问题,有说是附加依赖项的问题,还有说是符号加载问题,各种各样我一一试了就是没用,简直气die噜!

最后,一位博主的博客引起了我的注意,他也试了好多都没用,最后从代码入手,发现是参数设置不合理也会报同样的错误。 下面贴出该博客连接

于是我也从代码入手,通过调试发现出错在如下那一行代码:

imageROI = image(Rect(800, 350, logo.cols, logo.rows));

但是修改参数依旧不行,最后通过断点一步步测试,发现了一个问题,就是前面的图像显示都能成功,但就是第二幅图“原画图”显示与书上结果不一致,图片非常小。而该程序实现的是图像混合,明显大小不一致会导致无法混合而报错。 最终发现,问题出在这一行代码:

Mat image = imread(“dota.jpg”,199);

我把参数199改为1或者直接删除,图片显示就是正常大小,最终程序也运行成功!!!

总结

书上对imread的讲解是 : Mat imread(const string& filename,int flags=1) flags>0返回一个3通道的彩色图像,至于为什么设为199时图片大小不一致,我的理解是版本问题,我的是VS2015+OpenCV3.2.0,与示例程序是VS2010+OpenCV3.0.0,可能版本问题导致参数设定有区别。

同时也了解到,若再次遇到“Microsoft C++ 异常: cv::Exception”这类问题,不一定是配置的问题,也可能是代码、参数设定不合理,图片大小不符合而导致的。

靴靴观看厚!

经验分享 程序员 微信小程序 职场和发展