通過Mask實(shí)現(xiàn)圖片疊加和背景透明
在之前的文章中,我們介紹了使用OpenCV進(jìn)行圖片的與、或、非計(jì)算,實(shí)現(xiàn)了幾何圖案生成。而通過使用Mask,可以更好地實(shí)現(xiàn)圖片疊加的功能,并且能夠創(chuàng)建具有透明背景的效果。本文將演示如何通過Mask完成
在之前的文章中,我們介紹了使用OpenCV進(jìn)行圖片的與、或、非計(jì)算,實(shí)現(xiàn)了幾何圖案生成。而通過使用Mask,可以更好地實(shí)現(xiàn)圖片疊加的功能,并且能夠創(chuàng)建具有透明背景的效果。本文將演示如何通過Mask完成兩幅圖片的疊加,并且使背景透明化,并引入了ROI(Region of Interest)興趣點(diǎn)的概念。
利用按位與或非和MASK進(jìn)行圖片疊加
在OpenCV學(xué)習(xí)中,有時(shí)需要將兩幅圖片疊加,同時(shí)要求背景透明。OpenCV提供了按位與、或、非的功能,可以結(jié)合MASK的使用來實(shí)現(xiàn)這一需求。以下是主要函數(shù):
```
_and(roi, roi, maskmask)
_and(pic,pic, masknotmask)
```
下圖展示了疊加結(jié)果:
![image]()
![pic]()
讀取并顯示要疊加的圖片
首先,我們分別讀取兩幅要疊加的圖片,并將第一個(gè)圖片賦值給變量“image”,第二個(gè)圖片賦值給變量“pic”。代碼如下:
```python
import cv2 as cv
import numpy as np
image ('')
pic ('')
("pic", pic)
```
設(shè)置要疊加的位置偏移量
接下來,我們需要設(shè)置要疊加的位置偏移量,即“deltax”和“deltay”。這里將“deltax”設(shè)置為50,“deltay”設(shè)置為150。同時(shí),獲取第二個(gè)圖片的行數(shù)和列數(shù),并創(chuàng)建興趣點(diǎn)(ROI)。
```python
deltax 50
deltay 150
rows, cols [:2]
roi image[deltax:rows deltax, deltay:cols deltay]
("roi", roi)
```
生成興趣點(diǎn)(ROI)
在第一個(gè)圖片中,根據(jù)輸入的坐標(biāo)生成興趣點(diǎn)(ROI)。代碼如下:
```python
gray (pic, _BGR2GRAY)
ret, mask (gray, 150, 255, _BINARY)
("mask", mask)
```
創(chuàng)建掩碼(Mask)
通常情況下,掩碼一般是白底黑字或黑底白字。而在本例中,我們將與掩碼顏色相反,即變成黑底白字。代碼如下:
```python
notmask _not(mask)
("notmask", notmask)
```
對(duì)ROI和第二個(gè)圖像進(jìn)行Mask操作
分別對(duì)ROI和第二個(gè)圖像進(jìn)行Mask操作,注意Mask參數(shù)的使用。代碼如下:
```python
backimage _and(roi, roi, maskmask)
("backimage", backimage)
frontpic _and(pic, pic, masknotmask)
("frontpic", frontpic)
```
注意,此時(shí)的“backimage”已經(jīng)是黑字彩色背景。
疊加兩幅圖像
將兩幅圖像疊加在一起,并將結(jié)果賦值給“result”。代碼如下:
```python
result (backimage, frontpic)
("result", result)
```
此時(shí),ROI區(qū)域已經(jīng)完成疊加。
將疊加區(qū)域放回原圖
最后,將疊加的區(qū)域放回原圖,并顯示結(jié)果。代碼如下:
```python
image[deltax:rows deltax, deltay:cols deltay] result
("image", image)
```
通過以上步驟,我們成功地完成了兩幅圖片的疊加,并且實(shí)現(xiàn)了背景透明化的效果。希望本文能夠幫助你更好地理解和應(yīng)用OpenCV中的Mask功能。