场景

此功能主要是用来学习用法,功能不重要,学会了用法,其他功能自己开发。

效果

原证件照

背景图

合成效果

实现

导入一些工具包

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实现抠图给证件照换背景相关推荐

  1. python如何换背景_python实现抠图给证件照换背景源码

    本文实例为大家分享了python实现抠图给证件照换背景的具体代码,供大家参考,具体内容如下 import cv2 import numpy as np import matplotlib.pyplot ...

  2. 官方正版授权Apowersoft 傲软抠图AI智能换背景工具软件

    傲软抠图是一款AI智能抠图软件,3秒内完成自动抠图,还可以使用软件内编辑工具继续创作图片.无论是个人照片.电商图片或营销设计图,有了AI智能的帮助,图片创作将变得简单.省时.有趣. Apowersof ...

  3. 蓝底换白底边缘不干净_全网最详细的证件照换背景以及照片排版

    来源:www.16xx8.com 相信很多同学碰到过需要给背景照换颜色的时候,我们平时照的证件照,一般都是红底,人家给你拍了也不会各个颜色都给你发个电子版,这时我们遇到要蓝底的时候怎么办呢?护照要蓝底 ...

  4. 证件照底色怎么修改?证件照换背景怎么换?

    提交报名照片时,相关方有时对照片的背景会有要求,比如要求为白色.红色.蓝色.浅蓝色等,如果自己的照片背景不符合要求就需要修改背景颜色.比如使用ps抠图来证件照换底色,其实可以试试压缩图的证件换背景(h ...

  5. [Qt]图像处理小软件——给证件照换背景

    之前看到码农大佬分享的文章,感觉是个小乐子,就自己动手做了个小软件,方便还没学会PS的小伙伴们临时换背景Hhhh~ 资源索引: 这里是具体的步骤实现[VS2017]图像处理--给证件照换背景 这里是证 ...

  6. 如何换照片背景底色?在线证件照换背景怎么换

    大家在网络中使用发电子版照片传输的场合也是越来越多了,这也就需要经常性的使用电子照片,那么不同的场景要求的证件照背景色也不一样,所以就需要我们去给证件照换底色,很多小伙伴都不知道怎么证件照换背景(ht ...

  7. 1寸照片如何修改底色?证件照换背景教程

    许多报名平台上传一寸证件照时都对背景颜色有具体要求,那么我们就需要证件照换底色来应对,本文将介绍一个快速证件照换背景(https://www.yasuotu.com/coloreplace)的方法,可 ...

  8. 如何给证件照换背景底色?如何改变图片背景色?

    在平时工作.生活中,经常要用到证件照,不同用途的证件照对底色也有不同的要求,如果不想每次都去重新拍照,就需要自己学会给照片换背景底色,接下来小编就教大家一个证件照换背景(https://www.yas ...

  9. java面试换背景颜色_证件照换底色 证件照换背景 证件照背景颜色

    很多人都不知道怎么让证件照换底色,如果单位要求要红底证件照,而你手里只有蓝底的,怎么办?下面小编就来教你,怎么给证件照换底色换背景颜色. 小美智能证照小程序可以在线拍摄制作证件照,还支持证件照换底色, ...

最新文章

  1. android 设置允许http请求_网络请求框架----OkHttp原理
  2. mmdetection2.3.0版本安装过程,以及训练、测试、可视化等(亲测好用,很顺利)
  3. POJ 3621 Sightseeing Cows
  4. 用户故事与敏捷开发方法笔记05
  5. qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面
  6. Construct Maximum Binary Tree
  7. 如果工作满三十年可以提前退休,你会申请提前退休吗?
  8. 《推荐系统笔记(十五)》流行度以及基于流行度的推荐
  9. HDU2013 蟠桃记【递推】
  10. 使用BMfont制作含有中文图片的.fnt格式字体合图
  11. 2.8数据-paddlepaddle数据集uci_housing
  12. 怎么把图片文字转换成文字
  13. Gi t 折磨疯了的SSL证书问题
  14. @EnableCaching
  15. python自动化 2 对象定位(1)
  16. 计算机64和32位的区别是什么意思,Windows7 32位和64位的区别是什么?
  17. 国防科大人工智能考研_AI +消费级无人机技术将改变国防部
  18. 蓝桥杯研究生c语言试题答案,蓝桥杯试题C语言答案.doc
  19. Android仿人人客户端(v5.7.1)——采用RelativeLayout做父容器,实现左侧滑动菜单(二)
  20. 哥去面试,每次都被赶出来,没天理

热门文章

  1. Linux极速版学习!
  2. 渝粤题库 陕西师范大学 《中央银行学Ⅰ》作业
  3. 音频 3A 处理实践,让你的应用更「动听」
  4. 用友U8老版本升级 单据表头栏目显示名称空白,例如:发货单的表头客户名称.这几个如果是必须项目就是空白.
  5. 基于arduino的串口控制数码管(5611AH)显示数字(初学,入门级附代码)
  6. html引用本地html页面,怎么引用jquery?
  7. 程序员的基本素质---树上还剩几只鸟
  8. Docker 安装 Mysql , Redis,ElasticSearch,Kibana,RabbitMQ,Zipkin,Nacos,Minio Docker服务器环境搭建
  9. java ee程序员招聘_程序员招聘网
  10. miniconda配置镜像源