场景:

通过对前面Mat类、imread函数、imshow函数、imwrite函数等的学习,写一个综合项目:把一张logo的图片嵌入到另一张图片中。


问题描述

​当我运行的时候:​

报出这样的错误,并且自动跳转到mat.inl.hpp这个源码中

0x00007FFF663E4FD9 处(位于 OC.exe 中)引发的异常: 
Microsoft C++ 异常: cv::Exception,
位于内存位置 0x00000078226FEE58 处。

OpenCV报错: cv::Exception,位于内存位置 0x00000078226FEE58 处。_opencv


原因分析:

1、首先我就去百度,查看是不是Mat类的用法错误,就去百度了解了一下:

参考,不过对于小白的我看不懂,就又去百度其他的
​​roi了解​​

OpenCV报错: cv::Exception,位于内存位置 0x00000078226FEE58 处。_计算机视觉_02


2、我就开始对源码就行一点一点的运行,发现到这行代码就会报错

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

这我当初就纳闷了,明明是看着书写的,怎么会错呢,于是乎我就百度一下,看了一下这个【​​博主​​】,按照他的意思就是Rect的矩形坐标设置太大了,logo图跑出去了,下面Rect的具体用法。

Rect(INT,INT,INT,INT):创建一个矩形对象,通过使用四个整数来初始化矩形左上角的横坐标、纵坐标以及右下角的横坐标、纵坐标(不要弄反)(cocos2d中的rect参数是(x, y, width, height),第三第四个参数分别是矩形的宽和高)

这个时候把坐标改一下,我改成如下:

imageROI = image(Rect(300, 10, logo.cols, logo.rows));

3、不过这里还有一个Bug,我参考了另一个【​​博主​​】,这个参数如果写199,会把原图缩小很多,同样会造成logo图片超出区域。把它改成1或者不写就可以了。

Mat image = imread("D:\\dota.jpg",199);

成功实现:

OpenCV报错: cv::Exception,位于内存位置 0x00000078226FEE58 处。_opencv_03