首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

教你用OpenCV和Python给证件照换底色(蓝底<->红底->白底)

在我们的生活中常常要用到各种底色要求的证件电子照,红底、蓝底、或者白底,而假如你手上只有一种底色的证件照,你又不想再去拍又不会PS怎么办?今天教你们用OpenCV和Python给你的证件照换底色。

Python3

numpy函数库

OpenCV库

Windows10 + Anaconda+Pycharm

1.读取要换底色的图片

导入OpenCV库,使用imread函数读取图片。

importcv2

importnumpyasnp

#读取照片并显示

image=cv2.imread('yang.jpg')

cv2.imshow('image',image)

2.对图片进行缩放

证件照原图太大,不易显示,cv2.resize函数进行缩放处理。

#图像缩放并显示

img = cv2.resize(image,None,fx=0.5,fy=0.5)

rows,cols,channels = img.shape

print(rows,cols,channels)

cv2.imshow('img',img)

3.将图片转换为灰度图像

cv2.cvtColor函数将读取的图像默认是BGR格式转换为HSV格式,将彩色图片转换为hsv灰度图片,之后才能进行腐蚀和膨胀操作。

#图片转换为灰度图并显示

hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

cv2.imshow('hsv',hsv)

4.对图片进行二值化处理

通过cv2.inRange函数对图片进行二值化操作,获取背景的mask,二值化处理视为了将灰度图片转换为黑白图片,如下图将红色的背景用白色表示,白色区域就是我们后面遍历像素点替换的条件,就是将白色的区域替换为蓝色。

cv2.inRange(hsv, lower_red, upper_red):在lower_red和upper_red两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)

#图片的二值化处理

#红底变蓝底

#将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色()

lower_red= np.array([,135,135])

upper_red = np.array([180,245,230])

mask = cv2.inRange(hsv,lower_red,upper_red)

#显示图像

cv2.imshow('mask',mask)

# #蓝底变红底

# lower_blue = np.array([90,70,70])

# upper_blue = np.array([110,255,255])

# mask = cv2.inRange(hsv, lower_blue, upper_blue)

#显示图像

# cv2.imshow('mask',mask)

5.对图片进行腐蚀和膨胀

在进行二值化操作之后,我们可以看到黑色区域有一些噪声,嘴的部分是白的,还有少数白点,就cv2.erode或者cv2.dilate函数对图片再进行腐蚀和膨胀操作,均可以有效消除噪声。

#腐蚀膨胀

erode=cv2.erode(mask,None,iterations=1)

cv2.imshow('erode',erode)

dilate=cv2.dilate(erode,None,iterations=1)

cv2.imshow('dilate',dilate)

6.遍历像素点替换背景颜色

对上述进行了腐蚀或者膨胀操作的图片进行像素点遍历,将白色区域的像素点的位置,也就是原图的背景部分的像素的对应的位置,替换成你想要替换的底色即可。

dilate[i,j]==255: 像素点为255表示的是白色,我们就要将白色处的像素点,替换为你想要的照片底色。

img[i,j]=(0,0,255):此处替换颜色,为BGR通道,不是RGB通道,若是想要将红底变成蓝底img[i,j]=(255,0,0),若是想将蓝底变为红底则img[i,j]=(0,0,255),若是想变白底img[i,j]=(255,255,255)

#遍历每个像素点,进行颜色的替换

foriinrange(rows):

forjinrange(cols):

ifdilate[i,j]==255:#像素点255表示白色

img[i,j]=(255,,) # 此处替换颜色,为BGR通道,不是RGB通道

cv2.imshow('res',img)

#窗口等待的命令,表示无限等待

cv2.waitKey()

红底变蓝底

蓝底变红底

变白底

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201209A04ZTN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券