前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >numpy 去除多张图片共同背景

numpy 去除多张图片共同背景

作者头像
用户6021899
发布2019-09-04 16:16:52
1K0
发布2019-09-04 16:16:52
举报

有时候我们对多张相似图片进行操作之前,为了节省计算开销,需要去除背景:

示例代码:

代码语言:javascript
复制
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()

计算出的共同背景如下(其中白色部分表示蓝绿红三通道全部相同,是真正的背景。彩色的表示仅有部分通道相同):

第一张图抠掉公共背景后为:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档