OpenCV-Python 抠图,并将抠出的图重叠到另一张图片中
主要工作原理为将图置为灰度图,根据阈值取出相应的灰度值转换为0 或 1(非黑即白)的图像,然后对黑或白区域进行抠图取得区域,然后进行抠图。效果如下:
实现代码如下:
import cv2 as cv
# 加载两张图片
img1 = cv.imread('messi.jpeg')
img2 = cv.imread('opencv-logo.png')
# 我希望把 LOGO 防止到左上角,所以创建了一个区域(roi)
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols]
# 将 LOGO 图转换为灰度图,阈值为 10, 最大值为 255
img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY)
mask_inv = cv.bitwise_not(mask)
# 现在将 ROI 抠出黑色区域
img1_bg = cv.bitwise_and(roi,roi,mask = mask_inv)
# 抠出 LOGO 图像
img2_fg = cv.bitwise_and(img2,img2,mask = mask)
# 将抠出的 LOGO 防入 ROI 区域中
dst = cv.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
# 显示图像
cv.imshow('res',img1)
# 退出,并释放资源
cv.waitKey(0)
cv.destroyAllWindows()
本文示例完整代码下载;