python环境opencv通过掩码实现图片叠加(MASK)
1、opencv学习中有时要完成两幅图片叠加,并且背景透明。,
opencv提供了按位与或非的功能再结合MASK的使用。让叠加和ROI变得简单
主要函数:
cv.bitwise_and(roi, roi, mask=mask)
cv.bitwise_and(pic,pic, mask=notmask)
下图为生成结果

2、首先分别读入 两幅要叠加的图 把pic带入第一个。
第二个大小要小于第一个 否则会失败。!
import cv2 as cvimport numpy as npimport copy
image = cv.imread('c:\\meiping1.png')# cv.imshow("image", image)pic = cv.imread('c:\\dajiangdahe.png')cv.imshow("pic", pic)


3、设置要叠加的位置偏移量 deltax deltay
deltax = 50deltay = 150rows, cols = pic.shape[:2]roi = image[deltax:rows+deltax, deltay:cols+deltay]print(roi)cv.imshow("roi", roi)
生成兴趣点 ROI
这是在第一个图里 根据输入坐标生成的。

4、gray = cv.cvtColor(pic, cv.COLOR_BGR2GRAY)
转灰度 然后二值化! 这些内容前面已经介绍过了。此处略过解释
ret, mask = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)
cv.imshow("mask", mask)
掩码一般是白底黑字 或黑底白字

5、#与mask颜色相反
此处变成黑底白字!
notmask = cv.bitwise_not(mask)
cv.imshow("notmask", notmask)

6、分别进行roi和第二个图像进行 mask操作
注意mask=mask
backimage = cv.bitwise_and(roi, roi, mask=mask)
cv.imshow("backimage", backimage)
注意mask=notmask
frontpic = cv.bitwise_and(pic,pic, mask=notmask)
cv.imshow("frontpic", frontpic)
注意此时backimage 已经是黑字 彩色背景


7、把两幅图叠加
result = cv.add(backimage, frontpic)cv.imshow("result", result)
注意此时ROI区域已经ok了。

8、image[deltax:rows+deltax, deltay:cols+deltay] = result
# print()
cv.imshow("image", image)
最后把叠加的区域放到image[deltax:rows+deltax, deltay:cols+deltay]就好了!
完美!
