有时候我们对多张相似图片进行操作之前,为了节省计算开销,需要去除背景:
示例代码:
import cv2
import numpy as np
#计算多张相似图片的共同背景
img1st = cv2.imread('24.png')
H,W, chanels = img1st.shape
cv2.imshow("1st image", cv2.resize(img1st ,(int(0.3*W),int(0.3*H)))) #原图像素高,缩小了了好显示
p = np.ones(img1st.shape)
for i in range(25,31): #加上第1张图,共7张图
imgNew = cv2.imread('%d.png' % i)
delta = imgNew == img1st #比较异同
p *= delta # 逻辑与,全部图中相同的
cv2.imshow("background", cv2.resize(p*img1st ,(int(0.3*W),int(0.3*H)))) # 背景图
#p_any = p.sum(axis =2).astype("Bool") #逻辑或。任一通道为真则为真
#p_any = p_any.repeat(3).reshape(H,W,3)
#cv2.imshow("without background1", cv2.resize(img1st - p_any*img1st ,(int(0.3*W),int(0.3*H))))
p_all = p.prod(axis =2).astype("Bool") #求乘积(逻辑与)。任一通道为真则为真。更严,三通道都同的才算背景
p_all = p_all.repeat(3).reshape(H,W,3)
cv2.imshow("background removed", cv2.resize(img1st - p_all*img1st ,(int(0.3*W),int(0.3*H))))
cv2.waitKey()
cv2.destroyAllWindows()
计算出的共同背景如下(其中白色部分表示蓝绿红三通道全部相同,是真正的背景。彩色的表示仅有部分通道相同):
第一张图抠掉公共背景后为:
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!