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 完整例程21. 图像的叠加

opencv视频逐帧提取,然后图像叠加得出一个图像要用到啥函数?

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

Python 大白从零开始 OpenCV 学习课-4.图像的叠加与混合

python-opencv-图像的叠加

请求帮助解决opencv处理图像融合问题