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中的fabs()方法的使用
May 14 Python
Python 操作文件的基本方法总结
Aug 10 Python
Python AES加密实例解析
Jan 18 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python基础教程之异常详解
Jan 10 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
怎么快速自学python
Jun 22 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 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
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
vue实现微信分享功能
2018/11/28 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
解读Python编程中的命名空间与作用域
2015/10/16 Python
python的socket编程入门
2018/01/29 Python
Python3数字求和的实例
2019/02/19 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
python如何停止递归
2020/09/09 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
自荐信如何“自荐”
2013/10/24 职场文书
初三学生评语大全
2014/04/24 职场文书
实习单位评语
2014/04/26 职场文书
法制宣传月活动方案
2014/05/11 职场文书
保护野生动物倡议书
2014/05/16 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
老干部工作汇报材料
2014/10/28 职场文书
母亲节寄语大全
2015/02/27 职场文书
岗位聘任报告
2015/03/02 职场文书
中秋联欢会主持词
2015/07/04 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
golang中的struct操作
2021/11/11 Golang