重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“如何使用Python OpenCV给证件照换底色”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Python OpenCV给证件照换底色”吧!
专注于为中小企业提供成都网站制作、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业衡阳县免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
1、读取照片
import cv2import numpy as np# 读取照片image = cv2.imread('1.jpg')
2、修改照片尺寸
发现图片太大,修改图片尺寸
image = cv2.resize(image,None,fx=0.5,fy=0.5)
第一个参数image:为原始图像
第二个参数size:尺寸数组,我设置None
第三个和第四个参数fx,fy:新图为原图的比例。
比例和尺寸只能设置一个
# 修改尺寸image = cv2.resize(image, None, fx=0.5, fy=0.5)
3、BGR图片转灰度图
彩色图无法进行梯度闭运算。
闭运算:对图像先进行膨胀再腐蚀,有助于关闭前景物体上的小孔或者小黑点
形态学变换:开运算,闭运算,梯度运算
所以先将图片转换为hsv格式
cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
可以将彩色图片转化为hsv灰度图片
转换成hsv是因为,hsv的色彩空间有表可查。
# 图片转换为二值化图hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)print(hsv)
4、图片二值化处理
形态学变换需要的是二值图片。
cv2.inRange(hsv,lower_red,upper_red)
hsv:图像
lower_red指的是图像中低于这个lower_red的值,图像值变为0
upper_red指的是图像中高于这个upper_red的值,图像值变为0
而在lower_red~upper_red之间的值变成255。
完成二值变换。
每张图的lower_red,upper_red 不同。自己可以查找hsv色彩空间表。然后结合,修改数值。
# 图片的二值化黑白处理lower_blue = np.array([90, 70, 70])upper_blue = np.array([110, 255, 255])heibai = cv2.inRange(hsv, lower_blue, upper_blue)# 显示cv2.imshow('image', image)cv2.imshow('hsv', hsv)cv2.imshow('heibai', heibai)# 无限等待cv2.waitKey(0)# 销毁内存cv2.destroyAllWindows()[object Object][object Object]
5、图片去噪
黑白色的照片周围可能有黑色小点噪声。这种情况下需要去除背景色噪声,选用膨胀。
膨胀即对图片高亮色进行膨胀。周围只有有一个为1,即是1;再进行腐蚀,缩小图片尺寸。即闭运算操作。
不同的图片噪声不一样,如是前景色人物含有小白点,则进行开运算操作。
这次颜色的图片中因为颜色分明,不存在明显噪音,如果去除噪音可以采用下面方法
# 闭运算k = np.ones((5, 5), np.uint8)r
6、图片颜色替换
遍历黑白照,找到白色像素点的位置索引,同理找到原图(白色像素点对应位置索引),换成颜色替换。
# 颜色替换imageNew = np.copy(image)rows, cols, channels = image.shapefor i in range(rows): for j in range(cols): if r[i, j] == 255: # 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色 imageNew[i, j] = (0, 0, 255) # 此处替换颜色,为BGR通道,不是RGB通道
完整代码:
import cv2import numpy as np # 读取照片image = cv2.imread('1.jpg')# 修改尺寸image = cv2.resize(image, None, fx=0.5, fy=0.5)# 图片转换为二值化图hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)print(hsv)# 图片的二值化黑白处理lower_blue = np.array([90, 70, 70])upper_blue = np.array([110, 255, 255])heibai = cv2.inRange(hsv, lower_blue, upper_blue)# 闭运算k = np.ones((5, 5), np.uint8)r = cv2.morphologyEx(heibai, cv2.MORPH_CLOSE, k)# 颜色替换imageNew = np.copy(image)rows, cols, channels = image.shapefor i in range(rows): for j in range(cols): if r[i, j] == 255: # 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色 imageNew[i, j] = (0, 0, 255) # 此处替换颜色,为BGR通道,不是RGB通道# 显示cv2.imshow('image', image)cv2.imshow('hsv', hsv)cv2.imshow('heibai', heibai)cv2.imshow('r', r)cv2.imshow('imageNew', imageNew)# 无限等待cv2.waitKey(0)# 销毁内存cv2.destroyAllWindows()
到此,相信大家对“如何使用Python OpenCV给证件照换底色”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!