基于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中使用item()方法遍历字典的例子
Aug 26 Python
Python编程之string相关操作实例详解
Jul 22 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
python3将视频流保存为本地视频文件
Jun 20 Python
Django添加sitemap的方法示例
Aug 06 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
Python3 JSON编码解码方法详解
Sep 06 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 Python
python中requests库+xpath+lxml简单使用
Apr 29 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
批量修改RAR文件注释的php代码
2010/11/20 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
angularJS 入门基础
2015/02/09 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
Python出现segfault错误解决方法
2016/04/16 Python
对Python 语音识别框架详解
2018/12/24 Python
在python中画正态分布图像的实例
2019/07/08 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Python datetime模块的使用示例
2021/02/02 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
关工委先进个人事迹材料
2014/05/23 职场文书
学校清明节活动总结
2014/07/04 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
班主任先进事迹材料
2014/12/17 职场文书
保研推荐信格式
2015/03/25 职场文书
运动会广播稿200字
2015/08/19 职场文书
win10更新失败无限重启解决方法
2022/04/19 数码科技