OpenCV库——轻松更换证件照背景色
本文作者:寇晓璇,中南财经政法大学统计与数学学院
本文编辑:张孟晗
技术总编:陈 鼎
Stata&Python云端课程来啦!
为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》、《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦
导读
一般情况下,我们习惯使用Photoshop来更换证件照背景色,同样地,Python通过结合`OpenCV`和`Numpy`库也可以快速实现证件照换底,方法更加简单、快捷。本文将以蓝底照片为例,将其底色转换为红色,大家看懂代码后也可以自行修改其他颜色的背景。
pip install numpy
pip install opencv-python
注:`cv2`模块的安装命令与以往略有不同,需输入`opencv-python`进行安装。
# 导入相关库
import cv2
import numpy as np
# 读取图片
img = cv2.imread('image1.jpg') #' '内输入图片路径
导入的原始图片
img = cv2.resize(img,None,fx=0.9,fy=0.9) #resize()图片缩放,其中fx和fy表示缩放比例
rows,cols,channels = img.shape
print(rows,cols,channels)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue = np.array([90,70,70])
upper_blue = np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue) #蓝色范围内变白,其余之外全部变黑
erode=cv2.erode(mask,None,iterations=1) #进行腐蚀操作
dilate=cv2.dilate(mask,None,iterations=1) #进行膨胀操作
#遍历每个像素点,进行颜色的替换
for i in range(rows):
for j in range(cols):
if dilate[i,j]==255: # 像素点为255表示的是白色,此处将白色处的像素点替换为红色(将if dilate[i,j]==255中的dilate换成erode对比试试)
img[i,j]=(0,0,255) # 此行将蓝底替换成红底,即(0,0,255)代表红色,由于历史原因,为BGR(蓝绿红)通道,不是RGB(红绿蓝)通道,所以255放第三个位置
# 显示图片
cv2.imshow('img',img) # ' '内填写路径
# 保存图片
cv2.imwrite('image2.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),100])
转换后的图片
完整代码
import cv2
import numpy as np
# 读取并显示图片
img=cv2.imread('image1.jpg')
# 图像缩放
img = cv2.resize(img,None,fx=0.9,fy=0.9)
rows,cols,channels = img.shape
print(rows,cols,channels)
# 图片转换为灰度图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# 图片的二值化处理,可能会出现噪声(白点),有的图片显示的很明显,这就需要我们进行腐蚀或膨胀。
lower_blue = np.array([90,70,70])
upper_blue = np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue) #蓝色范围内变白,其余之外全部变黑
#腐蚀膨胀,主要用于去处噪声
erode=cv2.erode(mask,None,iterations=1) #进行腐蚀操作
dilate=cv2.dilate(mask,None,iterations=1) #进行膨胀操作
#遍历每个像素点,进行颜色的替换
for i in range(rows):
for j in range(cols):
if dilate[i,j]==255: # 像素点为255表示的是白色,此处将白色处的像素点替换为红色(将if dilate[i,j]==255中的dilate换成erode对比试试)
img[i,j]=(0,0,255) # 此行将蓝底替换成红底,即(0,0,255)代表红色,由于历史原因,为BGR(蓝绿红)通道,不是RGB(红绿蓝)通道,所以255放第三个位置
# 显示图片
cv2.imshow('img',img)
#设置窗口等待,如果不设置,窗口会一闪而过
cv2.waitKey(0)
#保存图片
cv2.imwrite('image2.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),100])
大家只需将图片的路径进行替换,便可快速得到换底后的照片了。万变不离其宗,红底变蓝底、蓝底变白底,大家也可以着手去试试。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
800万年薪!还有谁?!
千古伤心词人,词伤几何?
去哪儿网攻略爬取——跟我一起去大理吧
"有你才有团"——Stata爬取王者荣耀英雄海报
如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫
利用Python构建马科维茨有效边界
rangestat,让统计量灵活滚动起来!
听说这样做立项成功率更高哦
如何处理缺失值?这一篇搞定!
善用dataex命令,高效沟通你我他
大数据下的大学分数线排行榜,快来围观!
《觉醒年代》—带你回到百年前
用Stata画的三维图很奇怪怎么办?
如何随机生成满足特定数据特征的新变量?
爬取无法翻页网页——自然科学基金项目及可视化
爬取京东评论数据进行情感分类
Stata与音乐之间的酷炫连接
这些年,爬虫俱乐部走出的博士们!看这里,近五年各校高被引论文上榜名单!
高校经管类核心期刊发文排行榜
疯狂的科研创新加速器——Stata!
可盐可甜,“粽”有所爱,快来pick你最爱的粽子吧!
好玩有趣的手绘图形库——cutecharts
爬虫实战|摩尔庄园微博话题讨论
一季度财报出炉,哪些公司最烧钱?
一季度财报出炉,哪些公司最赚钱?
技能篇 | 图片合并大法
批量空气质量数据文件合并分析
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。