Python利用opencv库过滤图片背景

栗子:
有以下两张图片:原图、原图对应的mask。
目的:过滤掉背景、留下前景。
原图:

在这里插入图片描述
mask:
在这里插入图片描述
利用opencv过滤掉背景、只留下前景的结果:
在这里插入图片描述
实现代码:

import os
import cv2
import numpy as np
images_path = './Artic_Tern_0056_141858.jpg'#原图路径	
masks_path = './Artic_Tern_0056_141858_mask.png'#原图对应mask路径
img = cv2.imread(images_path)# mask是.png格式的,image是.jpg格式的
print(type(img))
print(img.shape)
mask = cv2.imread(masks_path, 0) # “0”表示将mask以二值图像形式读取、以灰度值“1”读取会导致后面提取前景出错、原因是灰度图的通道数为3
print(type(mask))
print(mask.shape)
masked = cv2.add(img, np.zeros(np.shape(img), dtype=np.uint8), mask=mask) #观察中间的size输出结果,就可得到满足此行代码的输入img、mask条件
print(masked.shape)
#将image的相素值和mask像素值相加得到结果
cv2.imwrite("masked.png", masked)

注意输出的中间结果:
在这里插入图片描述
批量操作、只需要给出原图与mask路径、提取后的前景图片保存的路径即可:

import os
import cv2
import numpy as np
def add_mask2image_binary(images_path, masks_path, masked_path):
# Add binary masks to images
  for img_item in os.listdir(images_path):
    img_path = os.path.join(images_path, img_item)
    img = cv2.imread(img_path)
    mask_path = os.path.join(masks_path, img_item[:-4]+'.png') # mask是.png格式的,image是.jpg格式的
    mask = cv2.imread(mask_path, 0) # 将mask以二值图像形式读取
    #将image的相素值和mask像素值相加得到结果
    masked = cv2.add(img, np.zeros(np.shape(img), dtype=np.uint8), mask=mask) 
    cv2.imwrite(os.path.join(masked_path, img_item), masked)
images_path = 'D:\\BaiduNetdiskDownload\\cub_mask\\cub_mask\\cub_200\\Image'
masks_path = 'D:\\BaiduNetdiskDownload\\cub_mask\\cub_mask\\cub_200_mask\\duts'
masked_path = 'D:\\BaiduNetdiskDownload\\cub_mask\\cub_mask\\results_0'
add_mask2image_binary(images_path, masks_path, masked_path)

参考:https://blog.csdn.net/xnholiday/article/details/98886062

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值