python opencv 边缘检测 抠图,opencv+python用背景减去法抠图
opencv+python用背景减去法抠图
opencv+python用背景减去法抠图
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)
opencv+python用背景减去法抠图相关教程
python opencv 边缘检测 抠图,opencv+python用背景减去法抠图相关推荐
- python图像边缘检测_python opencv实现图像边缘检测
本文利用python opencv进行图像的边缘检测,一般要经过如下几个步骤: 1.去噪 如cv2.GaussianBlur()等函数: 2.计算图像梯度 图像梯度表达的是各个像素点之间,像素值大小的 ...
- python图像边缘检测_使用python获取图像中形状的轮廓(x,y)坐标
我需要使用python获得下面图像的轮廓坐标(x,y)的矩阵.使用python获取图像中形状的轮廓(x,y)坐标 我尝试用OpenCV的精明探测器和发现的轮廓,但我得到了很多的轮廓,我不知道如何让一个 ...
- Python利用paddlehub实现批量抠图和更换证件照背景底色
Python利用paddlehub实现批量抠图和更换证件照背景底色,图片使用卓别林的个人肖像,代码来源抠图功能实现的博客.代码做了一些更改已实现蓝底背景功能,并实现边界框图提取. import os ...
- 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- opencv 轻松入门 面向python pdf_OpenCV轻松入门:面向Python
OpenCV轻松入门:面向Python,由电子工业出版社在2019-05-01月出版发行,本书编译以及作者信息为: 李立宗 著,这是第1次发行, 国际标准书号为:9787121362903,品牌为电子 ...
- 【python第三方库】opencv库常用方法和属性
文章目录 一.opencv总览 应用领域 1.计算机视觉领域方向 2.计算机操作底层技术 二.常用操作 安装 1. 图片加载.显示和保存 2. 图像显示窗口创建与销毁 3. 图片的常用属性的获取 4. ...
- 用python进行抠图,去除图像背景干扰
为了让我们后续的应用更加专注于目标,我们需要把目标从图像中抠出来,以便于后续的使用.比如我们要识别汽车车身的颜色,首先要把车周围背景过滤,然后再进行车身颜色像素统计. 实现抠图有两种方式,第一种是比较 ...
- 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- Python的图像处理库(OpenCV,PIL,matplotlib和scikit-image)
目前接触过的python图像处理代码涉及到多种的图像库,其中最常用的当属opencv和PIL.惭愧的是,以前只是拿来用,却一直迷惑为什么不同的代码会选择不同的图像库.这些图像库的联系和区别又是什么 ...
最新文章
- 给迷茫的程序员一些中肯建议,你还在虚度光阴吗?
- 在asp.net mvc中使用PartialView返回部分HTML段
- python设计一个学生类求最高分_设计一个学生类班级类
- DAO层使用泛型的两种方式
- python线程与进程
- 视音频数据处理入门:UDP-RTP协议解析
- 影响员工敬业度的三大因素
- POJ 3225 - 区间
- matlab连续型随机变量,matlab连续型随机变量的分布.doc
- com.android.pngp.tln,Android资源之图像资源(图像级别资源)
- Linux 视频教程学习资源
- DELL 笔记本 触摸板 驱动安装 与 禁用启动
- 怎么把PDF转换成JPG图片?这个方法你了解吗
- 使用excel计算空气质量指数AQI,空气质量分指数IAQI等
- java 释放锁_Java并发编程:锁的释放
- XYplorer 21.50.0100多语言版,资源管理器件之一
- html显示svg图片,HTML5/CSS3系列教程:使用SVG图片
- qcc302x qcc303x qcc512x TWS earbud通用操作说明 及体验软件
- 换皮后贴吧玩家反馈整理
- 抖音帐号如何避免播放量限流、降权和封号
热门文章
- 部署Kubernetes集群-1.18.6版本
- 托管代码与非托管代码之间的交互
- php mq死信队列,【RabbitMQ 实战指南】一 死信队列
- 谁能逗笑1860话务小姐
- 600分理科选计算机专业,女孩子理科成绩600分左右,但是性格内向,可以选择什么专业呢?...
- python3.0什么时候出的_Python 3.X简史——记录3.0之后的重要更新
- C++模拟化学物质合成程序《化学家》V1.0.5
- Java中switch的三种用法方式
- android开发:listView优化
- python 组织结构树_如何使用Python绘制组织树图?