《OpenCV3.0 编程入门》书中3.1.9节图像的载入、显示与输出示例程序练习报异常问题
来源:互联网 发布:gta5捏脸数据女爱丽丝 编辑:程序博客网 时间:2024/05/23 02:05
本文基于自己在练习毛星云的《OpenCV3.0编程入门》这本书时,在VS2013中照着书上的代码敲了一遍,结果编译时出现了“Unhandled exception at 0x7586845D in test_opencv3.0.exe: Microsoft C++ exception: cv::Exception at memory location 0x0029F5F0.”异常。于是和广大入门小白一样,第一时间想到万能的度娘,果然发现遇到这种问题的童鞋还真不少。然而几乎尝试了网上各种解决方案,却依然难以解决。于是博主决定还是靠自己,下面贴上源码以方便说明:
int main(){
Mat image = imread("qie.jpg");//图片大小为1024x768
Mat logo = imread("timg.jpg");//图片大小为650x477
Mat imageROI;
imageROI = image(Rect(800,350,logo.cols,logo.rows)); //注意添加图像的宽度和高度是否超出范围
addWeighted(imageROI,0.5,logo,0.3,0,imageROI);
namedWindow("sh");
imshow("sh",image);
waitKey();
return 0;
}
经过自己几番摸索之后,发现自己忽略了图片大小的细节,代码
imageROI = image(Rect(800,350,logo.cols,logo.rows));
的目的是在image中构造出一个矩形RIO(感兴趣区域),以便在这个区域上叠加图片“logo.jpg"。其中800,350是目标RIO的坐标(原图左上角为坐标原点),logo.cols,logo.rows的值分别为目标RIO区域的width、height。代码中博主用了自己的源图片,而不是作者书中的原图。其中“qie.jpg”大小为1024x768,而“timg.jpg”大小为650x477,当博主设置的坐标原点为800,350,同时logo.cols=650,logo.rows=477。问题就出在这里,此时目标RIO的区域坐标跨度为x方向:【800-->800+477=1277】,y方向坐标坐标跨度为【350-->350+650=1000】,明显超出了原图像("qie.jpg")的范围,导致溢出,产生异常。
解决的方法是,根据logo图片的大小合适设置RIO区域的坐标,避免溢出。例如,在当前图片大小下,设置水平方向_x=374,竖直方向_y=291将是能否产生异常的临界RIO坐标,再往右或者往下都会产生溢出。如当_x=374,_y=292时,出现异常如下图
当_y不变,_x=291时,程序正常显示,此时可以看到目标RIO区域位于原图右下角,但已经达到极限。
- 《OpenCV3.0 编程入门》书中3.1.9节图像的载入、显示与输出示例程序练习报异常问题
- opencv3编程入门学习笔记-----图像的载入、显示和输出到文件
- Opencv3.0载入显示与输出
- 图像的载入、显示和输出示例
- OpenCV 图像的载入,显示,初级图像混合与输出
- opencv学习(1)图像的载入、显示与输出
- 图像的载入与显示
- OpenCV--图像的载入、显示和输出
- opencv的图像载入、显示和输出
- opencv 图像的载入显示和输出
- opencv入门学习之三: 图像的载入,显示和输出 一站式完全解析
- 初学Opencv 之 (二)图像的载入 显示与输出
- opencv的几个图像载入、显示和输出的函数
- 图像的载入,显示和输出 一站式完全解析
- opencv 2.0以上版本 图像的载入,显示和输出
- opencv图像的载入,显示和输出完全解析
- OpenCV进阶 第一讲 图像的载入,显示和输出
- OpenCV之三 图像的载入,显示和输出
- tjut 5918
- Python中的变量
- cordova 插件的使用说明
- 【JZOJ4859】【NOIP2016提高A组集训第7场11.4】连锁店
- 堆排列
- 《OpenCV3.0 编程入门》书中3.1.9节图像的载入、显示与输出示例程序练习报异常问题
- 重建二叉树106. Construct Binary Tree from Inorder and Postorder Traversal
- 编写程序STUDENT *Create(STUDENT studs[],int n)。STUDENT是一个结构类型,包含姓名、成绩和指针域。studs数组中存储了n个STUDENT记录。create函
- 网易视频云郭再荣:打造一体化多场景的视频云平台
- 同一台服务器不同数据库表数据复制
- Cocos2d-Lua语法
- 奶牛集会
- POJ 1988 Cube Stacking(并查集+求距离+连通块中元素个数)
- CSS之外边距合并