通过Mask实现图片叠加和背景透明
在之前的文章中,我们介绍了使用OpenCV进行图片的与、或、非计算,实现了几何图案生成。而通过使用Mask,可以更好地实现图片叠加的功能,并且能够创建具有透明背景的效果。本文将演示如何通过Mask完成两幅图片的叠加,并且使背景透明化,并引入了ROI(Region of Interest)兴趣点的概念。
利用按位与或非和MASK进行图片叠加
在OpenCV学习中,有时需要将两幅图片叠加,同时要求背景透明。OpenCV提供了按位与、或、非的功能,可以结合MASK的使用来实现这一需求。以下是主要函数:
```
_and(roi, roi, maskmask)
_and(pic,pic, masknotmask)
```
下图展示了叠加结果:
![image]()
![pic]()
读取并显示要叠加的图片
首先,我们分别读取两幅要叠加的图片,并将第一个图片赋值给变量“image”,第二个图片赋值给变量“pic”。代码如下:
```python
import cv2 as cv
import numpy as np
image ('')
pic ('')
("pic", pic)
```
设置要叠加的位置偏移量
接下来,我们需要设置要叠加的位置偏移量,即“deltax”和“deltay”。这里将“deltax”设置为50,“deltay”设置为150。同时,获取第二个图片的行数和列数,并创建兴趣点(ROI)。
```python
deltax 50
deltay 150
rows, cols [:2]
roi image[deltax:rows deltax, deltay:cols deltay]
("roi", roi)
```
生成兴趣点(ROI)
在第一个图片中,根据输入的坐标生成兴趣点(ROI)。代码如下:
```python
gray (pic, _BGR2GRAY)
ret, mask (gray, 150, 255, _BINARY)
("mask", mask)
```
创建掩码(Mask)
通常情况下,掩码一般是白底黑字或黑底白字。而在本例中,我们将与掩码颜色相反,即变成黑底白字。代码如下:
```python
notmask _not(mask)
("notmask", notmask)
```
对ROI和第二个图像进行Mask操作
分别对ROI和第二个图像进行Mask操作,注意Mask参数的使用。代码如下:
```python
backimage _and(roi, roi, maskmask)
("backimage", backimage)
frontpic _and(pic, pic, masknotmask)
("frontpic", frontpic)
```
注意,此时的“backimage”已经是黑字彩色背景。
叠加两幅图像
将两幅图像叠加在一起,并将结果赋值给“result”。代码如下:
```python
result (backimage, frontpic)
("result", result)
```
此时,ROI区域已经完成叠加。
将叠加区域放回原图
最后,将叠加的区域放回原图,并显示结果。代码如下:
```python
image[deltax:rows deltax, deltay:cols deltay] result
("image", image)
```
通过以上步骤,我们成功地完成了两幅图片的叠加,并且实现了背景透明化的效果。希望本文能够帮助你更好地理解和应用OpenCV中的Mask功能。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。