基于OpenCV python3实现证件照换背景的方法


Posted in Python onMarch 22, 2019

简述

生活中经常要用到各种要求的证件照电子版,红底,蓝底,白底等,大部分情况我们只有其中一种,所以通过技术手段进行合成,用ps处理证件照,由于技术不到位,有瑕疵,所以想用python&openCV通过代码的方式实现背景颜色替换,加强一下对于openCV的学习,锻炼一下编码水平。

软件环境:

python3.5
opencv2
windows 10

图像载入

导入opencv库,使用imread函数读取图片

import cv2
import numpy as np

img=cv2.imread('zjz.jpg')

由于证件照太大,不方便显示,故进行缩放

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

原图如下

基于OpenCV python3实现证件照换背景的方法
(图片源于网络,已经马赛克处理,如有侵权,私信立即删除)

获取背景区域

首先将读取的图像默认BGR格式转换为HSV格式,然后通过inRange函数获取背景的mask。
HSV颜色范围参数可调节根据这篇文章

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)

获得的mask如下图

基于OpenCV python3实现证件照换背景的方法 

如图所示蓝色的背景在图中用白色表示,白色区域就是要替换的部分,但是黑色区域内有白点干扰,所以进一步优化。
腐蚀和膨胀

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

经过腐蚀和膨胀操作后如下图

基于OpenCV python3实现证件照换背景的方法 

处理后图像单独白色点消失。

替换背景色

遍历全部像素点,如果该颜色为dilate里面为白色(255)则说明该点所在背景区域,于是在原图img中进行颜色替换。

#遍历替换
for i in range(rows):
 for j in range(cols):
  if dilate[i,j]==255:
   img[i,j]=(0,0,255)#此处替换颜色,为BGR通道
cv2.imshow('res',img)

最终结果如下

基于OpenCV python3实现证件照换背景的方法
(图片源于网络,已经马赛克处理,如有侵权,私信立即删除)

总结

最开始想直接通过遍历全图进行替换背景色,但是图像中难免有些像素点和背景色一样,造成了干扰,导致最后结果不尽人意,所以想通过这种方法进行处理。显然最后有明显的ps痕迹。

最后贴上完整代码,不足之处欢迎各位指正!

import cv2
import numpy as np

img=cv2.imread('zjz.jpg')
#缩放
rows,cols,channels = img.shape
img=cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
cv2.imshow('img',img)

#转换hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)

#腐蚀膨胀
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 dilate[i,j]==255:
   img[i,j]=(0,0,255)#此处替换颜色,为BGR通道
cv2.imshow('res',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
Python实现控制台进度条功能
Jan 04 Python
python 调用win32pai 操作cmd的方法
May 28 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
Python银行系统实战源码
Oct 25 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 #Python
详解python-图像处理(映射变换)
Mar 22 #Python
python中如何使用分步式进程计算详解
Mar 22 #Python
浅谈Python基础—判断和循环
Mar 22 #Python
浅谈python常用程序算法
Mar 22 #Python
python实现移位加密和解密
Mar 22 #Python
python实现可逆简单的加密算法
Mar 22 #Python
You might like
PHP5 安装方法
2006/10/09 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
javascript倒计时功能实现代码
2012/06/07 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
Python计算信息熵实例
2020/06/18 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
物流管理应届生求职信
2013/11/07 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
自我评价范文
2013/12/22 职场文书
安全生产承诺书
2014/03/26 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
工程造价专业求职信
2014/07/17 职场文书
孩子满月酒答谢词
2015/09/30 职场文书