python opencv背景减去法抠图实现示例

 更新时间:2022年05月12日 09:17:12   作者:WTRD  
这篇文章主要为大家介绍了python opencv背景减去法抠图实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

导包

import cv2
from matplotlib import pyplot as plt
import numpy as np

导图

imA=cv2.imread("target.png")
plt.imshow(cv2.cvtColor(imA,cv2.COLOR_BGR2RGB))
imA.shape #(2436, 1125, 3)

imBG=cv2.imread("bg_30061.jpg")
plt.imshow(cv2.cvtColor(imBG,cv2.COLOR_BGR2RGB))

预处理

# Step 1 预处理
# 日常缩放图像,背景图要缩放到和图A意一样大
imBG=cv2.resize(imBG,(1125,2436),interpolation=cv2.INTER_CUBIC)
# 后续代码都是基于灰度图像操作的
imA_gray=cv2.cvtColor(imA,cv2.COLOR_BGR2GRAY)
imBG_gray=cv2.cvtColor(imBG,cv2.COLOR_BGR2GRAY)
# 背景减去
sub=imBG_gray.astype("int32")-imA_gray.astype("int32")
sub=np.absolute(sub).astype("uint8")
plt.imshow(cv2.cvtColor(sub,cv2.COLOR_BGR2RGB))

二值化图像

# Step 2 二值化图像
thresh=cv2.adaptiveThreshold(sub,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,19,5)
## 图像二值化有很多种方法, adaptiveThreshold 是基于局部的,最后两个参数,19,5 决定了边缘检测的清晰度
thresh=cv2.erode(thresh,None,iterations=2)
thresh=cv2.dilate(thresh,None,iterations=2)
# 膨胀腐蚀,主要是消去噪声点,同时边缘封闭(边缘不封闭,无法完全填充)
plt.figure(num="thresh")
plt.imshow(cv2.cvtColor(thresh,cv2.COLOR_BGR2RGB))
plt.close

边缘检测

# Step 3 边缘检测
cnts,hierarchy=cv2.findContours(thresh.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
len(cnts)
area=[]
for i in cnts:
    cnt_area = cv2.contourArea(i)
    area.append(cnt_area)
# 通过面积大小,找到需要的边缘的 index,这里为 866
mask=np.zeros([2436,1125],dtype=np.uint8)
mask[:,:]=255
res=cv2.drawContours(mask,cnts,866,(0,0,225),2)
plt.imshow(cv2.cvtColor(res,cv2.COLOR_BGR2RGB))
# 画出边缘

填充轮廓并制作掩模

# 填充轮廓并制作掩模
mask2=np.zeros([2436,1125],dtype=np.uint8)
mask2[:,:]=0
res2=cv2.drawContours(mask2,cnts,866,255,cv2.FILLED)
plt.imshow(cv2.cvtColor(res2,cv2.COLOR_BGR2RGB))

保存

# 保存为 png
h,w,c=imA.shape
b,g,r=cv2.split(imA)
imA_2=np.zeros((4,h,w),dtype=imA.dtype)
imA_2[0][0:h,0:w]=b
imA_2[1][0:h,0:w]=g
imA_2[2][0:h,0:w]=r
imA_2[3][0:h,0:w]=mask2
imA_new=cv2.merge(imA_2)
cv2.imwrite("imA_new.png",imA_new)

以上就是python opencv背景减去法抠图实现示例的详细内容,更多关于python opencv背景减去法抠图的资料请关注脚本之家其它相关文章!

相关文章

  • 详解Python中图像边缘检测算法的实现

    详解Python中图像边缘检测算法的实现

    这篇文章主要为大家详细介绍了python中图像边缘检测算法的原理及实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • python使用post提交数据到远程url的方法

    python使用post提交数据到远程url的方法

    这篇文章主要介绍了python使用post提交数据到远程url的方法,涉及Python使用post传递数据的相关技巧,需要的朋友可以参考下
    2015-04-04
  • Python 使用BeautifulSoup库的方法

    Python 使用BeautifulSoup库的方法

    BeautifulSoup库用于从HTML或XML文件中提取数据,它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容,本文给大家介绍Python 使用BeautifulSoup库的方法,感兴趣的朋友一起看看吧
    2023-10-10
  • 使用python实现将视频中的音频分离出来

    使用python实现将视频中的音频分离出来

    这篇文章主要介绍了使用python实现将视频中的音频分离出来,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 对Tensorflow中tensorboard日志的生成与显示详解

    对Tensorflow中tensorboard日志的生成与显示详解

    今天小编就为大家分享一篇对Tensorflow中tensorboard日志的生成与显示详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python面向对象之类和对象实例详解

    Python面向对象之类和对象实例详解

    这篇文章主要介绍了Python面向对象之类和对象,结合实例形式详细分析了Python面向对象相关的继承、多态、类及对象等概念、原理、操作技巧与注意事项,需要的朋友可以参考下
    2018-12-12
  • Python中%r和%s的详解及区别

    Python中%r和%s的详解及区别

    这篇文章主要介绍了Python中%r和%s的详解及区别的相关资料,需要的朋友可以参考下
    2017-03-03
  • Python实现线性插值和三次样条插值的示例代码

    Python实现线性插值和三次样条插值的示例代码

    这篇文章主要介绍了Python实现线性插值和三次样条插值的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Django命名URL和反向解析URL实现解析

    Django命名URL和反向解析URL实现解析

    这篇文章主要介绍了Django命名URL和反向解析URL实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 手机使用python操作图片文件(pydroid3)过程详解

    手机使用python操作图片文件(pydroid3)过程详解

    这篇文章主要介绍了手机使用python操作图片文件(pydroid3)过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论