opencv图像进行叠加处理
Posted CPP技术网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv图像进行叠加处理相关的知识,希望对你有一定的参考价值。
提到为图片加水印,大家并不陌生,使用opencv的操作可以将图像进行叠加,效果类似于加水印文章来源: 原创文章版权所有,未经授权,禁止转载。
利用opencv封装的函数将两个图像进行叠加,使用一大一小两张图像,目的是将小图像叠加到大图中,就像大图的水印。这里用到的两个图像分别是知名的Lena图像和opencv的logo。
示例代码如下:
Mat image=imread("lena.png"); //载入背景图像
Mat logo = imread("opencv.png"); //载入logo
namedWindow("lena"); //依次显示图像图像
imshow("lena",image);
waitKey(0);
namedWindow("logo");
imshow("logo",logo);
waitKey(0);
Mat imageROI=image(Rect(0,0,logo.cols,logo.rows)); //获取感兴趣区域,即logo要放置的区域
addWeighted(imageROI,0.8,logo,0.6,0,imageROI); //图像叠加
namedWindow("叠加"); //显示叠加图像
imshow("叠加",image);
waitKey(0);
先是将两张图像载入,之后要选取logo在背景图像要放置的区域,也就是常说的感兴趣区域。这里感兴趣区域的选取方法是image(Rect(0,0,logo.cols,logo.rows)),image是背景图(即Lena图像),Rect()是在背景图上选择感兴趣区域的大小,其参数分别是:区域起点坐标位置,区域的长和宽(长和宽是logo的尺寸)。
接下来就是完成图像叠加了。使用opencv的函数addWeighted(),参数的含义分别是:感兴趣区域,感兴趣区域参数,logo图,logo参数,添加的常数项,输出图像。下面看一下效果图,
在这个实验中,我将logo放在了Lena图像的左上角,在选取logo放置位置时,需要注意的是要保证logo不会超出背景图像的边界。在结果图中,我们可以看到logo图像具有一定的透明度,这是addWeighted()中两个图像参数调节的结果,感兴趣的读者可以调节这两个参数试试。
可能有读者会好奇,在addWeighted()函数中叠加的是感兴趣区域,叠加后的图像也是输出到了感兴趣区域,为什么显示叠加图像时时显示的image图像,而不是imageROI,并且结果还是叠加后的结果。这是因为imageROI是我们感兴趣的区域,它不是在背景图中选取后复制这部分区域的信息,而是与背景图共享这一区域的信息,所以我们对感兴趣区域imageROI进行处理也是对背景图中相应区域进行处理。我们可以将imageROI显示出来看一下效果。左边是载入的logo图,右边是叠加后的感兴趣区域,即imageROI,可以从右边图像中看到logo已经发生了变化。
以上是关于opencv图像进行叠加处理的主要内容,如果未能解决你的问题,请参考以下文章
opencv视频逐帧提取,然后图像叠加得出一个图像要用到啥函数?
在 Python 多处理进程中运行较慢的 OpenCV 代码片段