Python实现抠图给证件照换背景
场景
此功能主要是用来学习用法,功能不重要,学会了用法,其他功能自己开发。
效果
原证件照
背景图
合成效果
实现
导入一些工具包
opencv(cv2),用于图像处理
numpy,用于数据计算。
matplotlib用于出图。
import cv2
import numpy as np
import matplotlib.pyplot as plt
新建显示照片函数
def show(image):plt.imshow(image)plt.axis('off')plt.show()
导入证件照
img=cv2.imread('font.jpg') #图片导入
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #转换颜色模型
print(img.shape) #打印图片规格
show(img) #显示图片
导入背景图
back_img = cv2.imread('back.jpg') #图片导入
back_img = cv2.cvtColor(back_img,cv2.COLOR_BGR2RGB) #转换颜色模型
print(back_img.shape) #打印图片规格
show(back_img) #显示图片
裁剪图片
#img = img[0:1000,150:550] #裁剪图片大小
#show(img) #显示图片数值可以自己调整,根据自己照片的具体大小调整,将没用的内容裁剪掉。
缩放图片
这里选择的的图片大小合适,背景图大点,这里是1920*1200
证件照大小是295*413
如果大小不合适要进行缩放图片
下面是示例对证件照进行缩放(假如大小不合适的话)
#print(img.shape) #打印图片规格
#img=cv2.resize(img,None,fx=0.9,fy=0.9) #图片缩小10%
#print(img.shape) #打印图片规格
这里相当于在原来基础上乘以0.9,即相当于图片缩放10%。
抠图
先把图片准换成HSV格式
img_hsv = cv2.cvtColor(img,cv2.COLOR_RGB2HSV) #把图片转换成HSV格式,用于抠图
show(img_hsv) #显示图片
执行抠图
lower_blue=np.array([0,0,0]) #获取最小阈值
upper_blue=np.array([0,255,255]) #获取最大阈值
mask = cv2.inRange(img_hsv, lower_blue, upper_blue) #创建遮罩
show(mask) #显示遮罩
图像腐蚀与膨胀
erode=cv2.erode(mask,None,iterations=3) #图像腐蚀
show(erode) #显示图片
dilate=cv2.dilate(erode,None,iterations=1) #图像膨胀
show(dilate) #显示图片
图像合并
center = [400,800] #设置前景图开始位置
for i in range(rows):for j in range(cols):if opening[i,j]==0: #代表黑色back_img[center[0]+i,center[1]+j] =img[i,j] #赋值颜色
show(back_img) #显示图片back_img = cv2.cvtColor(back_img,cv2.COLOR_RGB2BGR) #图像格式转换
back_img=cv2.resize(back_img,None,fx=0.8,fy=0.8) #图像缩放20%
cv2.imwrite('result.png',back_img) #保存图像
注:设置前景图开始位置时,要根据自己的图片的大小合理地设置前景图位于背景图的位置,这里400与800使其能正好位于差不多居中位置。
完整代码
import cv2
import numpy as np
import matplotlib.pyplot as plt#建立显示图片的函数
def show(image):plt.imshow(image)plt.axis('off')plt.show()#导入前景图
img=cv2.imread('font.jpg') #图片导入
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #转换颜色模型
print(img.shape) #打印图片规格
show(img) #显示图片#导入背景图
back_img = cv2.imread('back.jpg') #图片导入
back_img = cv2.cvtColor(back_img,cv2.COLOR_BGR2RGB) #转换颜色模型
print(back_img.shape) #打印图片规格
show(back_img) #显示图片#裁剪图片
#img = img[0:1000,150:550] #裁剪图片大小
#show(img) #显示图片#缩放图片
#print(img.shape) #打印图片规格
#img=cv2.resize(img,None,fx=0.9,fy=0.9) #图片缩小10%
#print(img.shape) #打印图片规格#拆分图片信息
rows,cols,channels = img.shape #拆分图片信息#转换格式
img_hsv = cv2.cvtColor(img,cv2.COLOR_RGB2HSV) #把图片转换成HSV格式,用于抠图
show(img_hsv) #显示图片#抠图
lower_blue=np.array([0,0,0]) #获取最小阈值
upper_blue=np.array([0,255,255]) #获取最大阈值
mask = cv2.inRange(img_hsv, lower_blue, upper_blue) #创建遮罩
show(mask) #显示遮罩erode=cv2.erode(mask,None,iterations=3) #图像腐蚀
show(erode) #显示图片
dilate=cv2.dilate(erode,None,iterations=1) #图像膨胀
show(dilate) #显示图片opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (8,8))) #开运算
show(opening) #显示图片center = [400,800] #设置前景图开始位置
for i in range(rows):for j in range(cols):if opening[i,j]==0: #代表黑色back_img[center[0]+i,center[1]+j] =img[i,j] #赋值颜色
show(back_img) #显示图片back_img = cv2.cvtColor(back_img,cv2.COLOR_RGB2BGR) #图像格式转换
back_img=cv2.resize(back_img,None,fx=0.8,fy=0.8) #图像缩放20%
cv2.imwrite('result.png',back_img) #保存图像
源码以及文件下载
https://download.csdn.net/download/badao_liumang_qizhi/10842960
Python实现抠图给证件照换背景相关推荐
- python如何换背景_python实现抠图给证件照换背景源码
本文实例为大家分享了python实现抠图给证件照换背景的具体代码,供大家参考,具体内容如下 import cv2 import numpy as np import matplotlib.pyplot ...
- 官方正版授权Apowersoft 傲软抠图AI智能换背景工具软件
傲软抠图是一款AI智能抠图软件,3秒内完成自动抠图,还可以使用软件内编辑工具继续创作图片.无论是个人照片.电商图片或营销设计图,有了AI智能的帮助,图片创作将变得简单.省时.有趣. Apowersof ...
- 蓝底换白底边缘不干净_全网最详细的证件照换背景以及照片排版
来源:www.16xx8.com 相信很多同学碰到过需要给背景照换颜色的时候,我们平时照的证件照,一般都是红底,人家给你拍了也不会各个颜色都给你发个电子版,这时我们遇到要蓝底的时候怎么办呢?护照要蓝底 ...
- 证件照底色怎么修改?证件照换背景怎么换?
提交报名照片时,相关方有时对照片的背景会有要求,比如要求为白色.红色.蓝色.浅蓝色等,如果自己的照片背景不符合要求就需要修改背景颜色.比如使用ps抠图来证件照换底色,其实可以试试压缩图的证件换背景(h ...
- [Qt]图像处理小软件——给证件照换背景
之前看到码农大佬分享的文章,感觉是个小乐子,就自己动手做了个小软件,方便还没学会PS的小伙伴们临时换背景Hhhh~ 资源索引: 这里是具体的步骤实现[VS2017]图像处理--给证件照换背景 这里是证 ...
- 如何换照片背景底色?在线证件照换背景怎么换
大家在网络中使用发电子版照片传输的场合也是越来越多了,这也就需要经常性的使用电子照片,那么不同的场景要求的证件照背景色也不一样,所以就需要我们去给证件照换底色,很多小伙伴都不知道怎么证件照换背景(ht ...
- 1寸照片如何修改底色?证件照换背景教程
许多报名平台上传一寸证件照时都对背景颜色有具体要求,那么我们就需要证件照换底色来应对,本文将介绍一个快速证件照换背景(https://www.yasuotu.com/coloreplace)的方法,可 ...
- 如何给证件照换背景底色?如何改变图片背景色?
在平时工作.生活中,经常要用到证件照,不同用途的证件照对底色也有不同的要求,如果不想每次都去重新拍照,就需要自己学会给照片换背景底色,接下来小编就教大家一个证件照换背景(https://www.yas ...
- java面试换背景颜色_证件照换底色 证件照换背景 证件照背景颜色
很多人都不知道怎么让证件照换底色,如果单位要求要红底证件照,而你手里只有蓝底的,怎么办?下面小编就来教你,怎么给证件照换底色换背景颜色. 小美智能证照小程序可以在线拍摄制作证件照,还支持证件照换底色, ...
最新文章
- android 设置允许http请求_网络请求框架----OkHttp原理
- mmdetection2.3.0版本安装过程,以及训练、测试、可视化等(亲测好用,很顺利)
- POJ 3621 Sightseeing Cows
- 用户故事与敏捷开发方法笔记05
- qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面
- Construct Maximum Binary Tree
- 如果工作满三十年可以提前退休,你会申请提前退休吗?
- 《推荐系统笔记(十五)》流行度以及基于流行度的推荐
- HDU2013 蟠桃记【递推】
- 使用BMfont制作含有中文图片的.fnt格式字体合图
- 2.8数据-paddlepaddle数据集uci_housing
- 怎么把图片文字转换成文字
- Gi t 折磨疯了的SSL证书问题
- @EnableCaching
- python自动化 2 对象定位(1)
- 计算机64和32位的区别是什么意思,Windows7 32位和64位的区别是什么?
- 国防科大人工智能考研_AI +消费级无人机技术将改变国防部
- 蓝桥杯研究生c语言试题答案,蓝桥杯试题C语言答案.doc
- Android仿人人客户端(v5.7.1)——采用RelativeLayout做父容器,实现左侧滑动菜单(二)
- 哥去面试,每次都被赶出来,没天理
热门文章
- Linux极速版学习!
- 渝粤题库 陕西师范大学 《中央银行学Ⅰ》作业
- 音频 3A 处理实践,让你的应用更「动听」
- 用友U8老版本升级 单据表头栏目显示名称空白,例如:发货单的表头客户名称.这几个如果是必须项目就是空白.
- 基于arduino的串口控制数码管(5611AH)显示数字(初学,入门级附代码)
- html引用本地html页面,怎么引用jquery?
- 程序员的基本素质---树上还剩几只鸟
- Docker 安装 Mysql , Redis,ElasticSearch,Kibana,RabbitMQ,Zipkin,Nacos,Minio Docker服务器环境搭建
- java ee程序员招聘_程序员招聘网
- miniconda配置镜像源