证件照换背景
- 分割出背景区域的掩膜(将图像转成hsv格式,通过cv2.inrange()选出特定颜色区域的背景)
背景区域的掩膜:背景是白色,头像部分是黑色的 - 对背景区域的掩膜取反,得到反掩膜(外黑里白)
- 画出与证件照相同大小的背景
- 新背景:新背景与掩膜按位与
- 分割头像区域。反掩膜与原图按位与
- 目标证件照:新背景与头像区域按位或。
参考
cv2.inrange(hsv,lower_range,upper_range)
将像素值为lower_range,upper_range
之间的像素点置为255,其余的置为0.
参数有三个
第一个参数:hsv
指的是原图
第二个参数:lower_range
指的是图像中低于这个lower_range
的值,图像值变为0
第三个参数:upper_range
指的是图像中高于这个upper_range
的值,图像值变为0
# coding:utf-8
'''
证件照换背景
'''
import cv2
import numpy as np
img = cv2.imread(r'../temp/shu.jpg')# 图像路径
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# LowerBlue = np.array([100, 100, 50])
#
# UpperBlue = np.array([130, 255, 255])
LowerBlue = np.array([20, 120, 100])#BGR
UpperBlue = np.array([130, 255, 200])
mask = cv2.inRange(hsv, LowerBlue, UpperBlue)# 背景是白,头像是黑
mask_not = cv2.bitwise_not(mask)# 外黑里白
# 画出蓝色背景
print(img.shape)
blank = np.zeros(img.shape,dtype = np.uint8)
color = (218,143,3)# BGR
# color = (255,0,0)
background = cv2.rectangle(blank,(0,0),(425,602),color = color,thickness=-1)# 全蓝矩形背景
background = cv2.bitwise_and(background,background,mask=mask)# 得到蓝色背景,空出头像部分
# 抠出头像
head = cv2.bitwise_and(img,img,mask=mask_not)# 头像是原图,背景是黑
# 合并
combination = cv2.bitwise_or(background,head)
# cv2.imshow('background',background)
# cv2.imshow('head',head)
# cv2.imshow('shu',combination)
cv2.imwrite('./shu.jpeg',combination)
# cv2.imshow('shu',mask)
# k = cv2.waitKey(0) # 无限等待一个键击,将此键击存在k变量中
# if k == 27: # 27代表esc,可以查看ascii码表
# cv2.destroyAllWindows() # 退出窗口
以下内容来自https://www.cnblogs.com/wangyblzu/p/5710715.html
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model).这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)