场景:
通过对前面Mat类、imread函数、imshow函数、imwrite函数等的学习,写一个综合项目:把一张logo的图片嵌入到另一张图片中。
问题描述
当我运行的时候:
报出这样的错误,并且自动跳转到mat.inl.hpp这个源码中
0x00007FFF663E4FD9 处(位于 OC.exe 中)引发的异常: Microsoft C++ 异常: cv::Exception, 位于内存位置 0x00000078226FEE58 处。
原因分析:
1、首先我就去百度,查看是不是Mat类的用法错误,就去百度了解了一下:
参考,不过对于小白的我看不懂,就又去百度其他的
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);
成功实现: