python环境opencv通过掩码实现图片叠加(MASK)

2025-10-28 08:44:17

1、opencv学习中有时要完成两幅图片叠加,并且背景透明。,

opencv提供了按位与或非的功能再结合MASK的使用。让叠加和ROI变得简单

主要函数:

cv.bitwise_and(roi, roi, mask=mask)

cv.bitwise_and(pic,pic, mask=notmask)

下图为生成结果

python环境opencv通过掩码实现图片叠加(MASK)

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)

python环境opencv通过掩码实现图片叠加(MASK)

python环境opencv通过掩码实现图片叠加(MASK)

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

这是在第一个图里 根据输入坐标生成的。

python环境opencv通过掩码实现图片叠加(MASK)

4、gray = cv.cvtColor(pic, cv.COLOR_BGR2GRAY)

转灰度 然后二值化! 这些内容前面已经介绍过了。此处略过解释

ret, mask = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)

cv.imshow("mask", mask)

掩码一般是白底黑字 或黑底白字 

python环境opencv通过掩码实现图片叠加(MASK)

5、#与mask颜色相反

此处变成黑底白字!

notmask = cv.bitwise_not(mask) 

cv.imshow("notmask", notmask)

python环境opencv通过掩码实现图片叠加(MASK)

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  已经是黑字 彩色背景

python环境opencv通过掩码实现图片叠加(MASK)

python环境opencv通过掩码实现图片叠加(MASK)

7、把两幅图叠加

result = cv.add(backimage, frontpic)cv.imshow("result", result)

注意此时ROI区域已经ok了。

python环境opencv通过掩码实现图片叠加(MASK)

8、image[deltax:rows+deltax, deltay:cols+deltay] = result

# print()

cv.imshow("image", image)

最后把叠加的区域放到image[deltax:rows+deltax, deltay:cols+deltay]就好了!

完美!

python环境opencv通过掩码实现图片叠加(MASK)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢