python+opencv代码给证件照换底色(别再用PS啦)

您所在的位置:网站首页 用ps给照片换底色步骤 python+opencv代码给证件照换底色(别再用PS啦)

python+opencv代码给证件照换底色(别再用PS啦)

2024-07-10 06:04| 来源: 网络整理| 查看: 265

CSDN博客中关于修改证件底色的博文还不少。 昨天看到一个小姐姐的博文很有意思。链接https://blog.csdn.net/weixin_41261833/article/details/107071806 于是结合自己掌握的,写下自己的。 我不管,自己的博文才方便查找。

读取图片 import cv2 import numpy as np # 读取照片 image=cv2.imread('zhanjian.jpg') #显示 cv2.imshow('image',image) #无限等待 cv2.waitKey(0) #销毁内存 cv2.destroyAllWindows()

图片来源于网图,如有侵权,请联系我删除。 在这里插入图片描述

修改图片尺寸

发现图片太大,修改图片尺寸 image = cv2.resize(image,None,fx=0.5,fy=0.5)

第一个参数image:为原始图像 第二个参数size:尺寸数组,我设置None 第三个和第四个参数fx,fy:新图为原图的比例。 比例和尺寸只能设置一个

import cv2 import numpy as np # 读取照片 image=cv2.imread('zhanjian.jpg') #修改尺寸 image = cv2.resize(image,None,fx=0.5,fy=0.5) #显示 cv2.imshow('image',image) #无限等待 cv2.waitKey(0) #销毁内存 cv2.destroyAllWindows()

在这里插入图片描述

BGR图片转灰度图

彩色图无法进行梯度闭运算。闭运算(对图像先进行膨胀再腐蚀,有助于关闭前景物体上的小孔,或者小黑点。)形态学变换(开运算,闭运算,梯度运算) 所以先将图片转换为hsv格式 cv2.cvtColor(img,cv2.COLOR_BGR2HSV) 可以将彩色图片转化为hsv灰度图片 转换成hsv是因为,hsv的色彩空间有表可查。

import cv2 import numpy as np # 读取照片 image=cv2.imread('zhanjian.jpg') #修改尺寸 image = cv2.resize(image,None,fx=0.5,fy=0.5) # 图片转换为二值化图 hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV) #显示 cv2.imshow('image',image) cv2.imshow('hsv',hsv) #无限等待 cv2.waitKey(0) #销毁内存 cv2.destroyAllWindows()

在这里插入图片描述

图片二值化处理

形态学变换需要的是二值图片。

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色彩空间表。然后结合,修改数值。

import cv2 import numpy as np # 读取照片 image=cv2.imread('zhanjian.jpg') #修改尺寸 image = cv2.resize(image,None,fx=0.5,fy=0.5) # 图片转换为二值化图 hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV) #print(hsv) # 图片的二值化黑白处理 lower_red = np.array([110,70,150]) upper_red = np.array([150,255,255]) heibai = cv2.inRange(hsv, lower_red, upper_red) #显示 cv2.imshow('image',image) cv2.imshow('hsv',hsv) cv2.imshow('heibai',heibai) #无限等待 cv2.waitKey(0) #销毁内存 cv2.destroyAllWindows()

在这里插入图片描述

图片去噪

黑白色的照片周围有很多黑色小点。是噪声。 我们需要去除背景色噪声,选用膨胀。 膨胀即对图片高亮色进行膨胀。周围只有有一个为1,即是1. 再进行腐蚀,缩小图片尺寸。 即闭运算操作。 不同的图片噪声不一样,如是前景色人物含有小白点,则进行开运算操作。 图像腐蚀和图像膨胀 形态学变换(开运算,闭运算,梯度运算)

import cv2 import numpy as np # 读取照片 image=cv2.imread('zhanjian.jpg') #修改尺寸 image = cv2.resize(image,None,fx=0.5,fy=0.5) # 图片转换为二值化图 hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV) #print(hsv) # 图片的二值化黑白处理 lower_red = np.array([110,70,150]) upper_red = np.array([150,255,255]) heibai = cv2.inRange(hsv, lower_red, upper_red) #闭运算 k=np.ones((5,5),np.uint8) r=cv2.morphologyEx(heibai,cv2.MORPH_CLOSE,k) #显示 cv2.imshow('image',image) cv2.imshow('heibai',heibai) cv2.imshow('r',r) #无限等待 cv2.waitKey(0) #销毁内存 cv2.destroyAllWindows()

合理选择卷积核大小:k=np.ones((5,5),np.uint8) 不同照片不一样。 在这里插入图片描述

图片颜色替换

遍历r(黑白照),找到白色像素点的位置索引, 同理找到原图(白色像素点对应位置索引) 换成颜色替换。

import cv2 import numpy as np # 读取照片 image=cv2.imread('zhanjian.jpg') #修改尺寸 image = cv2.resize(image,None,fx=0.5,fy=0.5) # 图片转换为二值化图 hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV) #print(hsv) # 图片的二值化黑白处理 lower_red = np.array([110,70,150]) upper_red = np.array([150,255,255]) heibai = cv2.inRange(hsv, lower_red, upper_red) #闭运算 k=np.ones((5,5),np.uint8) r=cv2.morphologyEx(heibai,cv2.MORPH_CLOSE,k) #原图显示 cv2.imshow('image',image) #颜色替换 rows,cols,channels = image.shape for i in range(rows): for j in range(cols): if r[i,j]==255: # 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色 image[i,j]=(0,0,255) # 此处替换颜色,为BGR通道,不是RGB通道 #新图显示 cv2.imshow('red',image) #无限等待 cv2.waitKey(0) #销毁内存 cv2.destroyAllWindows() #新图保存 cv2.imwrite('redzhengjian.jpg',image

在这里插入图片描述 完成啦。注意前文尺寸变小不是非要做的(可以不做的,本文只是为了好演示,才使用的尺寸变小。)

参考:https://blog.csdn.net/weixin_41261833/article/details/107071806 电气专业的计算机小白,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3