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 copyimage = cv.imread('c:\\meiping1.png')# cv.imshow("image", image)pic = cv.imread('c:\\dajiangdahe.png')cv.imshow("pic", pic)
3、设置要叠加的位置偏移量deltaxdeltaydeltax = 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=maskbackimage = cv.bitwise_and(roi, roi, mask=mask)cv.imshow("backimage", backimage)注意mask=notmaskfrontpic = 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]就好了!完美!