python实现证件照换底功能
作者:yanni0616 发布时间:2021-07-02 03:57:01
标签:python,证件照
本来是在找交通识别的程序,然后凑巧看见了证件照换底,于是学习了一下~一开始在网上找了一个很普遍写的程序,但是效果并不好,想要放弃了,然后看见了这个,参考:python opencv实现证件照换底功能
本人基于此做了一些改进,便于自己运行和调试,还加了中值滤波,本人觉得效果还不错~
代码:
import cv2
import numpy as np
def cvtBackground(path,color):
"""
功能:给证件照更换背景色(常用背景色红、白、蓝)
输入参数:path:照片路径
color:背景色 <格式[B,G,R]>
"""
im=cv2.imread(path)
im_hsv=cv2.cvtColor(im,cv2.COLOR_BGR2HSV) #BGR和HSV的转换使用 cv2.COLOR_BGR2HSV
#aim=np.uint8([[im[0,0,:]]])
#hsv_aim=cv2.cvtColor(aim,cv2.COLOR_BGR2HSV)
mask=cv2.inRange(im_hsv,np.array([im_hsv[0,0,0]-5,100,100]),np.array([im_hsv[0,0,0]+5,255,255])) #利用cv2.inRange函数设阈值,去除背景部分
mask1=mask #在lower_red~upper_red之间的值变成255
img_median = cv2.medianBlur(mask, 5) #自己加,中值滤波,去除一些边缘噪点
mask = img_median
mask_inv=cv2.bitwise_not(mask)
img1=cv2.bitwise_and(im,im,mask=mask_inv) #将人物抠出
bg=im.copy()
rows,cols,channels=im.shape
bg[:rows,:cols,:]=color
img2=cv2.bitwise_and(bg,bg,mask=mask) #将背景底板抠出
img=cv2.add(img1,img2)
image={'im':im,'im_hsv':im_hsv,'mask':mask1,'img':img,'img_median':img_median}
cv2.startWindowThread() #加了这个后在图片窗口按Esc就可以关闭图片窗口
for key in image:
cv2.namedWindow(key)
cv2.imshow(key,image[key])
cv2.waitKey(0)
cv2.destroyAllWindows()
return img
#test
if __name__=='__main__':
img=cvtBackground('3.jpg',[0,0,180])
来源:https://blog.csdn.net/yanni0616/article/details/89850948


猜你喜欢
- git 删除分支git branch -D 分支名git查看分支git branch -agit 删除远程分支git push origin
- SQL Server管理,你做得好吗?下文这些可能会对你的工作有一些帮助,不妨耐心的看看吧。1. 数据库文件有.mdf .ndf .ldf三
- 看代码吧~import torchimport numpy as npfrom torchvision.transforms import
- 中文繁体、简体的差异,在NPL中类似英文中的大小写,但又比大小写更为复杂,比如同样为繁体字,大陆、香港和台湾又不一样。先前写过一篇中文繁简转
- 前言CAPTCHA全称Completely Automated Public Turing Test to Tell Computers a
- 今天继续给大家介绍渗透测试相关知识,本文主要内容是SQLMAP插件tamper编写与使用。免责声明:本文所介绍的内容仅做学习交流使用,严禁利
- 先来看个实例#!/usr/bin/env python import sys def search2(a,m):
- 一、理解装饰器所有东西都是对象(函数可以当做对象传递)由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。de
- 对于手机、相机等设备拍摄的照片,由于手持方向的不同,拍出来的照片可能是旋转0°、90°、180°和270°。即使在电脑上利用软件将其转正,他
- javascript可以根据输入值自动搜索显示相关的select列表,对于列表很长时可以很方便的查找到要的值。js代码:<script
- Vuex 中有以下几个核心概念:State:应用程序的状态存储在单一的状态树中,即 State。State 可以通过 store.state
- 1.MyBatis简介与配置MyBatis+Spring+MySql1.1MyBatis简介
- get和post方法最大的不同在于:1.get方法传值参数在url里面,而post参数放send里面2.post方法必须加上xmlHttp.
- 表结构很简单CREATE TABLE `oplogs` (`id` int(10) unsigned NOT NULL AUTO_INCRE
- 年前接到QCon的邀请,颇感意外。在我的印象里,QCon大会是后端开发工程师和架构师的技术大会。后来去QCon大会的官网搜索了下,发现原来Q
- Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。这篇文章使用tk
- 本文实例讲述了php函数连续调用的方法。分享给大家供大家参考。具体如下:<?php //返回$this,实现连续调用 class xi
- 插入视图的条件: 1.如果视图是基于一个基础表产生的,那么这就称为非连接视图,所有的非连接视图都是可以更新的,也就是说可以在该视图上进行,I
- 看到Python中有个函数名比较奇特,__init__我知道加下划线的函数会自动运行,但是不知道它存在的具体意义..Python中所有的类成
- SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo