20行代码教你用python给证件照换底色的方法示例


Posted in Python onFebruary 05, 2021

1.图片来源

该图片来源于百度图片,如果侵权,请联系我删除!图片仅用于知识交流。

20行代码教你用python给证件照换底色的方法示例

2.读取图片并显示

  • imread():读取图片;
  • imshow():展示图片;
  • waitkey():设置窗口等待,如果不设置,窗口会一闪而过;
import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')

# 显示图像
cv2.imshow('img',img)

# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

效果如下:

20行代码教你用python给证件照换底色的方法示例

3.图片缩放

resize():图片缩放,其中fx和fy表示缩放比例,0.5表示缩放为以前的 一半。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')

# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)

# 显示图像
cv2.imshow('img',img)

# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

4.将图片转换为灰度图像

三色图片有RGB三个颜色通道,无法进行腐蚀和膨胀的操作。这个就需要我们将彩色图片转换为hsv灰度图像后,再完成腐蚀和膨胀的操作。

cv2.cvtColor(img,cv2.COLOR_BGR2HSV)可以将彩色图片转化为hsv灰度图片。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')

# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)

# 图片转换为二值化图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

# 显示图像
cv2.imshow('hsv',hsv)

# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

5.将图片进行二值化处理

二值化处理是为了将图片转换为黑白图片。二值化类似于1表示男、2表示女,对于图像的处理我们也需要自定义一个最小值和最大值,这里分别用lower_blue和upper_blue表示

  • lower_blue = np.array([90,70,70])
  • upper_blue = np.array([110,255,255])
  • inRange(hsv, lower_blue, upper_blue)将图片进行二值化操作。
import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')

# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)

# 图片转换为灰度图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)

# 图片的二值化处理
lower_blue = np.array([90,70,70])
upper_blue = np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)


# 显示图像
cv2.imshow('mask',mask)

# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

缺点:我们观察第三章图片,发现黑色区域有时候会出现一些噪声(白点),这里可能显示的不是很明显,有的图片显示的很明显,这就需要我们进行腐蚀或膨胀。

6.图象的腐蚀和膨胀

上面的图象进行二值化后,出现了一些噪声,我们可以采用腐蚀或膨胀进行图片的处理,观察哪种的处理效果好一些。

  • erode(mask,None,iterations=1)进行腐蚀操作。
  • dilate(erode,None,iterations=1)进行膨胀操作。
import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')

# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)

# 图片转换为灰度图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)

# 图片的二值化处理
lower_blue=np.array([90,70,70])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)


#腐蚀膨胀
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow('erode',erode)

dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)


# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

观察上图:对于这个图片,无论是腐蚀或膨胀,都起到了很好的去图片噪声的操作,我们使用腐蚀后的图片也可以,我们使用膨胀后的图片也可以。

7.遍历每个像素点进行颜色替换

图片是由每一个像素点组成的,我们就是要找到腐蚀后得到图片的,白色底色处的像素点,然后将原图中对应位置处的像素点,替换为红色。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')

# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)

# 图片转换为灰度图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)

# 图片的二值化处理
lower_blue=np.array([90,70,70])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)


#腐蚀膨胀
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow('erode',erode)

dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)

#遍历替换
for i in range(rows):
 for j in range(cols):
  if erode[i,j]==255: # 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色
   img[i,j]=(0,0,255) # 此处替换颜色,为BGR通道,不是RGB通道
cv2.imshow('res',img)

# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

效果如下:

20行代码教你用python给证件照换底色的方法示例

到此这篇关于20行代码教你用python给证件照换底色的方法示例的文章就介绍到这了,更多相关python 证件照换底色内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
机器学习python实战之决策树
Nov 01 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
Django添加feeds功能的示例
Aug 07 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
Python3安装pip工具的详细步骤
Oct 14 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
python如何求100以内的素数
May 27 Python
python 装饰器的实际作用有哪些
Sep 07 Python
Python request中文乱码问题解决方案
Sep 17 Python
python中time.ctime()实例用法
Feb 03 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 #Python
Python环境搭建过程从安装到Hello World
Feb 05 #Python
Python使用pyenv实现多环境管理
Feb 05 #Python
python中的unittest框架实例详解
Feb 05 #Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 #Python
用60行代码实现Python自动抢微信红包
Feb 04 #Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 #Python
You might like
最小化数据传输――在客户端存储数据
2006/10/09 PHP
php实现快速排序的三种方法分享
2014/03/12 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
PHP制作用户注册系统
2015/10/23 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
jQuery 树形结构的选择器
2010/02/15 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
js实现烟花特效
2020/03/02 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
浅谈Python爬取网页的编码处理
2016/11/04 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
python 利用toapi库自动生成api
2020/10/19 Python
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
解释下面关于J2EE的名词
2013/11/15 面试题
音乐表演专业毕业生求职信
2013/10/14 职场文书
环保倡议书怎么写
2014/05/16 职场文书
荆州古城导游词
2015/02/06 职场文书
环卫工作个人总结
2015/03/04 职场文书
工程主管竞聘书
2015/09/15 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python