基于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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
使用Python的PEAK来适配协议的教程
Apr 14 Python
python清除字符串里非字母字符的方法
Jul 02 Python
tensorflow建立一个简单的神经网络的方法
Feb 10 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
安装docker-compose的两种最简方法
Jul 30 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
Python类和实例的属性机制原理详解
Mar 21 Python
Python爬取梨视频的示例
Jan 29 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
python中 Flask Web 表单的使用方法
May 20 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
PHP写的资源下载防盗链类分享
2014/05/12 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
理解JavaScript中的对象 推荐
2011/01/09 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
JS运动特效之链式运动分析
2018/01/24 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
秘书专业自荐信范文
2013/12/26 职场文书
药剂专业学生求职信范文
2013/12/28 职场文书
学生会干部自荐信
2014/02/04 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
超市开店计划书
2014/04/26 职场文书
食品安全工作方案
2014/05/07 职场文书
国情备忘录观后感
2015/06/04 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
检讨书范文
2019/04/16 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL
解析redis hash应用场景和常用命令
2021/08/04 Redis