2016 - 2024

感恩一路有你

通过Mask实现图片叠加和背景透明

浏览量:2457 时间:2024-02-03 11:10:35 作者:采采

在之前的文章中,我们介绍了使用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功能。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。