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中尾递归用法实例详解
Apr 28 Python
Python输出9*9乘法表的方法
May 25 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
解决python中 f.write写入中文出错的问题
Oct 31 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
python实现微信自动回复及批量添加好友功能
Jul 03 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 Python
python如何调用百度识图api
Sep 29 Python
python 对xml解析的示例
Feb 27 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
php设计模式 Visitor 访问者模式
2011/06/28 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
domReady的实现案例
2016/11/23 Javascript
JS验证不重复验证码
2017/02/10 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Python检查ping终端的方法
2019/01/26 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
详解如何修改python中字典的键和值
2020/09/29 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
德国帽子专家:Hutshopping
2019/11/03 全球购物
教育专业毕业生推荐信
2014/07/10 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
80后婚前协议书范本
2014/10/24 职场文书
幸福终点站观后感
2015/06/04 职场文书
感恩教师节主题班会
2015/08/12 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL