python实现抠图给证件照换背景源码

 更新时间:2019年08月20日 09:03:40   作者:BADAO_LIUMANG_QIZHI  
这篇文章主要为大家详细介绍了python实现抠图给证件照换背景源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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) #保存图像

完整源码:python实现抠图给证件照换背景源码

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

相关文章

  • TensorFlow命名空间和TensorBoard图节点实例

    TensorFlow命名空间和TensorBoard图节点实例

    今天小编就为大家分享一篇TensorFlow命名空间和TensorBoard图节点实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 深入理解最新Python中的Match Case

    深入理解最新Python中的Match Case

    最近发布的 Python 3.10 的所有主要新特性中最重要就是 Match-Case 语法,本文将带你深入探讨,会发现 Match-Case 其实没有那么简单
    2021-11-11
  • Django中的AutoField字段使用

    Django中的AutoField字段使用

    这篇文章主要介绍了Django中的AutoField字段使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python里glob模块知识点总结

    python里glob模块知识点总结

    在本篇文章里小编给大家整理的是一篇关于python里glob模块知识点总结,有需要的朋友们可以参考下。
    2021-01-01
  • python版本的仿windows计划任务工具

    python版本的仿windows计划任务工具

    这篇文章主要介绍了python版本的仿windows计划任务工具,计划任务工具根据自己设定的具体时间,频率,命令等属性来规定所要执行的计划,当然功能不是很全大家可以补充
    2018-04-04
  • Django 对象关系映射(ORM)源码详解

    Django 对象关系映射(ORM)源码详解

    这篇文章主要介绍了Django 对象关系映射(ORM)源码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 使用Python操作Redis所有数据类型的方法

    使用Python操作Redis所有数据类型的方法

    当今互联网时代,数据处理已经成为了一个非常重要的任务,而Redis作为一款高性能的NoSQL数据库,越来越受到了广大开发者的喜爱,本篇博客将介绍如何使用Python操作Redis的所有类型,以及一些高级用法,需要的朋友可以参考下
    2023-11-11
  • 解决PyCharm同目录下导入模块会报错的问题

    解决PyCharm同目录下导入模块会报错的问题

    今天小编就为大家分享一篇解决PyCharm同目录下导入模块会报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • conda管理Python虚拟环境的实现

    conda管理Python虚拟环境的实现

    本文主要介绍了conda管理Python虚拟环境的实现,主要包括使用conda工具创建、查看和删除Python虚拟环境,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Python将DataFrame的某一列作为index的方法

    Python将DataFrame的某一列作为index的方法

    下面小编就为大家分享一篇Python将DataFrame的某一列作为index的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论