首页 > 编程语言 >Python OpenCV给证件照换底色

Python OpenCV给证件照换底色

时间:2022-10-05 10:02:34浏览次数:47  
标签:Python image cv2 OpenCV hsv np 证件照 red 255

投简历、找工作这些事都需要证件照,有些还要求证件照背景颜色、尺寸大小,本文分享一下如果通过Python OpenCV来实现照片裁剪和更换背景色


1、读取照片

import cv2import numpy as np# 读取照片image = cv2.imread('1.jpg')

Python OpenCV给证件照换底色_像素点


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)

Python OpenCV给证件照换底色_二值化_02Python OpenCV给证件照换底色_图片转换_03


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()

Python OpenCV给证件照换底色_像素点_04Python OpenCV给证件照换底色_二值化_05Python OpenCV给证件照换底色_二值化_06


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给证件照换底色_二值化_07

标签:Python,image,cv2,OpenCV,hsv,np,证件照,red,255
From: https://blog.51cto.com/domi/5732257

相关文章

  • Python爬虫
    目录MangoDBRedis爬虫常用库安装seleniumlxmlbeautifulsouppyquerypymysqlpymongoRedisFlaskDjango爬虫原理正则表达式BeautifulSoup解析库基本使用标签选择器标准选择器CS......
  • Python编程经验
    目录代码结构工作目录全局变量调试信息异常处理尝试次数化简结构日志哈希和ID函数第三方库exchangelib字符串处理replacestripsplitjoin格式化列表处理打包函数代码结构......
  • python爬虫使用session保持登录状态
    今天有个客户需求,从网站上下载会员试题,需要在登录状态下载,然后将网页中展示的试题保存在word中。网站上展示的所有试题要保存在一个word文档中,但是每一个试题结束下一个试......
  • Python文件处理
    Excel打开csv,去重,保存到exceldf=pd.read_csv("newhouse.csv",names=['name','xzqy','wylx',······,'state'])df=df.drop_duplicates()df.to_excel("newhouse......
  • Python数据处理
    PandasSeries一列带索引的数据s=pd.Series(np.random.randn(5),name='Helloworld')DataFrame二维数据,多组Series的集合df=pd.read_excel('GDP.xlsx')重......
  • Python可视化
    地图可视化pyecharts绘制各省市GDPfrompyecharts.globalsimportThemeType#引入主题Map(init_opts=opts.InitOpts(width="1000px",height="600px",theme=ThemeTyp......
  • python5-eg
    1实例012programmer_1='程序员甲:搞IT太辛苦了,我想换行......怎么办?'3programmer_2='程序员乙:敲一下回车键'4print(programmer_1+'\n'+programmer_2)实......
  • Python 中四舍五入的方法,你真的会吗
    Python的四舍五入,还真有点小麻烦。1、使用round大多数情况下,我们会使用round来保留小数,但这并不符合我们在数学知识里的规则。round(number[,ndigits])round()......
  • 【笨方法学python】ex18 - 命名、变量、代码、函数
    代码如下:点击查看代码#-*-coding:utf-8--*-#命名、变量、代码、函数#thisoneislikeyourscriptswithargvdefprint_two(*args): arg1,arg2=args pri......
  • python装饰器进阶指南
    前言最近一有时间就在整理自己常用的代码片段,并做成了私人pip包,正好整理到了装饰器的部分,所以就想着写篇文章来总结一下。写这篇文章的目的是为了让大家对装饰器有一个更......