python证件照换底色_python利用opencv实现证件照换底
网上交证件照的时候不同单位对底色的要求不一样,当你手里只有一张蓝底照片,却要求交红底或者白底的证件照时,不免就尴尬了些。此时的你为了避免重拍的麻烦,不得不打开ps一点一点地去抠图换背景,费时费力。
文章图片
opencv
今天就给大家介绍一下python利用opencv库进行蓝底换红底或者白底照片的操作。
1.强大的opencv库
说到图像处理,不得不提opencv库。它是一个跨平台的计算机视觉库,可以运行在不同操作系统上,它由一些列c函数和少量c++函数组成,并提供python,matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
我们这里用的opencv-python 就是opencv的python API接口。
文章图片
重点来袭
本文中主要用到的方法进行介绍:
cv2.imread(picpath):该函数功能为读入图像cv2.cvtColor():色彩转换函数,因为在图像处理的时候,有些图像可能在RGB颜色空间信息不如转换到其它颜色空间更清晰。cv2.inRange(hsv, lower_red, upper_red):该函数主要设阈值,去背景。第一个参数hsv为原图像;第二个参数指图像中低于这个lower_red的值,图像值变为0;第三个参数指图像中高于这个upper_red的值,图像值变为0。cv2.erode():图像腐蚀处理,可以使图像的色彩更加突出,减少不必要颜色的干扰,也就是消除白噪声。cv2.dilate():图像膨胀处理,腐蚀会消除白噪声,但也会缩小图片中的物体,所以需要用膨胀处理。2.实现照片换底
1.读取原始图片,并对图片缩放。
文章图片
第一步
之所以进行缩放是因为对图片缩放可以增强它的平滑度和清晰度。
2.RGB空间转为HSV空间
文章图片
第二步
因为RGB通道不能很好反应出物体的具体颜色信息,而HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。
设置lower_blue,低于这个值图像值变为0,即为黑色。设置upper_blue,高于这个值图像值变为0,即为黑色。
文章图片
inRange函数处理后的mask
再通过inRange函数将蓝色与人的头像色比对出来,将蓝色区域变成白色,其它区域为黑。处理的效果如图
3.腐蚀膨胀
文章图片
第三步
腐蚀对图像的白噪声进行消除,随之带来的后果是使图像中的物体缩小,所以再进行膨胀操作,放大物体。这两个操作一般都是成对出现。
4.遍历替换颜色
遍历每一个像素的值,如果发现是白色(即原照片的蓝色区域)就将其变为红色
文章图片
遍历替换
这样变换出来的图片就为红底的。原图与现图对比:
文章图片
图片对比
这里实现了蓝底变红底,要是实现变白底,只需要让第四步的遍历替换中的代码
img[i, j] = (0, 0, 255)变为img[i, j] = (255, 255, 255)即可,感兴趣的小伙伴快来试试吧。
要是分享的功能小伙伴觉得有用,可以点赞收藏一下,以后说不准就用到了!代码可以留言获取哦!
文章图片
谢谢大家
【python证件照换底色_python利用opencv实现证件照换底】另外可以关注我,会分享好多办公中省时省力简单的代码哦!欢迎留言讨论。转载请注明出处(百家号:戏说编程)
推荐阅读
- 使用python对图片进行写入数据库并从数据库中读取的操作
- python怎么改成白底_教你用OpenCV 和 Python给证件照换底色(蓝底 红底->白底)...
- python|利用Python制作证件照
- Python|Python 证件照换背景色(蓝底->白底,蓝底->红底)!
- Python入门系列(一)安装环境
- python|他来了!性能吊打 Node.js 和 Deno 的新一代 javaScript 运行时!
- Visual|Visual Studio Code Python – 2022年7月更新
- Python解析参数的三种方法
- 关于python如何引用excel文件
- Python|数学建模之(二次规划模型Python代码)