本来是在找交通识别的程序,然后凑巧看见了证件照换底,于是学习了一下~一开始在网上找了一个很普遍写的程序,但是效果并不好,想要放弃了,然后看见了这个,参考:python opencv实现证件照换底功能
本人基于此做了一些改进,便于自己运行和调试,还加了中值滤波,本人觉得效果还不错~
代码:
import cv2
import numpy as np
def cvtBackground(path,color):
"""
功能:给证件照更换背景色(常用背景色红、白、蓝)
输入参数:path:照片路径
color:背景色
"""
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) #自己加,中值滤