脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - python opencv背景减去法抠图实现示例

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

2022-12-29 12:09WTRD Python

这篇文章主要为大家介绍了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)

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

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

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

 

预处理

# 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))

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

 

二值化图像

# 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

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

 

边缘检测

# 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))
# 画出边缘

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

 

填充轮廓并制作掩模

# 填充轮廓并制作掩模
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))

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

 

保存

# 保存为 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 opencv背景减去法抠图的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/Alleine/article/details/108641108

延伸 · 阅读

精彩推荐
  • Python详解Numpy数组转置的三种方法T、transpose、swapaxes

    详解Numpy数组转置的三种方法T、transpose、swapaxes

    这篇文章主要介绍了详解Numpy数组转置的三种方法T、transpose、swapaxes,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Asher1177272021-06-30
  • PythonPython构建网页爬虫原理分析

    Python构建网页爬虫原理分析

    这篇文章主要给大家讲解了构建网页爬虫的技术原理以及实现的逻辑关系,有兴趣的朋友阅读下吧。...

    脚本之家7612020-12-26
  • Pythonpython取数作为临时极大值(极小值)的方法

    python取数作为临时极大值(极小值)的方法

    今天小编就为大家分享一篇python取数作为临时极大值(极小值)的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    晓东邪9302021-04-08
  • Python高性能Python编译器Codon开源 速度百倍提升

    高性能Python编译器Codon开源 速度百倍提升

    编译器充当着高级语言与机器之间的翻译官,不同版本的 Python 编译器已被开发出来,下面我们将为大家介绍一款新的高性能 Python 编译器:Codon。该项目上...

    机器之心9262022-12-12
  • Pythonpython调用c++传递数组的实例

    python调用c++传递数组的实例

    今天小编就为大家分享一篇python调用c++传递数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    ShellCollector7552021-05-27
  • PythonPython 和 MongoDB 其实很配

    Python 和 MongoDB 其实很配

    MongoDB 其实就是一个大大的 JSON,在 Python 的世界里 dict 也是最吃香的类型,所以,他们天生就是一对。...

    哎妈呀Bug7332021-08-31
  • PythonPython绘制正余弦函数图像的方法

    Python绘制正余弦函数图像的方法

    这篇文章主要介绍了Python绘制正余弦函数图像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Python编程时光6872021-03-30
  • Pythontorch.utils.data.DataLoader与迭代器转换操作

    torch.utils.data.DataLoader与迭代器转换操作

    这篇文章主要介绍了torch.utils.data.DataLoader与迭代器转换操作,文章内容接受非常详细,对正在学习或工作的你有一定的帮助,需要的朋友可以参考一下...

    Orion's Blog8332022-10-09