作者:黄伟呢

来源:数据分析与统计学之美

1.需求说明

曾经有位同学在入职的前一天晚上被告知需要提交红色背景的证件照用以制作工号牌,然而此时他手头只有一张蓝色背景的。于是,他用PS替换了背景,省去了大半夜找自动拍照机和20块钱。

而今天本文要说的是,python也可以实现类似的功能。

我知道有人会说:“PS它不香吗?”。是的,仅从这一个小功能来说,python不是“最佳实践”,但我们并不是要告诉你如何换一个图片的背景色,而是让你了解python中有丰富的黑科技库(比如opencv),以及如何用这些库结合其他知识(比如图像处理)实现各种实用或者有趣的功能。

声明:该图片来源于百度图片搜索,仅作为技术演示使用。如有侵权,请联系我们删除!

2.读取图片并显示

  • imread():读取图片;

  • imshow():展示图片;

  • waitkey():设置窗口等待,如果不设置,窗口会一闪而过;

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')# 显示图像
cv2.imshow('img',img)# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

效果如下:

3.图片缩放

  • resize():图片缩放,其中fx和fy表示缩放比例,0.5表示缩放为以前的 一半。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)# 显示图像
cv2.imshow('img',img)# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

4.将图片转换为灰度图像

三色图片有RGB三个颜色通道,无法进行腐蚀和膨胀的操作。这个就需要我们将彩色图片转换为hsv灰度图像后,再完成腐蚀和膨胀的操作。

  • cv2.cvtColor(img,cv2.COLOR_BGR2HSV)可以将彩色图片转化为hsv灰度图片。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)# 图片转换为二值化图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)# 显示图像
cv2.imshow('hsv',hsv)# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

5.将图片进行二值化处理

二值化处理是为了将图片转换为黑白图片。二值化类似于1表示男、2表示女,对于图像的处理我们也需要自定义一个最小值和最大值,这里分别用lower_blue和upper_blue表示

  • lower_blue = np.array([90,70,70])

  • upper_blue = np.array([110,255,255])

  • inRange(hsv, lower_blue, upper_blue)将图片进行二值化操作。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)# 图片转换为灰度图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)# 图片的二值化处理
lower_blue = np.array([90,70,70])
upper_blue = np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)# 显示图像
cv2.imshow('mask',mask)# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

缺点:我们观察第三章图片,发现黑色区域有时候会出现一些噪声(白点),这里可能显示的不是很明显,有的图片显示的很明显,这就需要我们进行腐蚀或膨胀。

6.图象的腐蚀和膨胀

上面的图象进行二值化后,出现了一些噪声,我们可以采用腐蚀或膨胀进行图片的处理,观察哪种的处理效果好一些。

  • erode(mask,None,iterations=1)进行腐蚀操作。

  • dilate(erode,None,iterations=1)进行膨胀操作。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)# 图片转换为灰度图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)# 图片的二值化处理
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)
cv2.imshow('erode',erode)dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

结果如下:

观察上图:对于这个图片,无论是腐蚀或膨胀,都起到了很好的去图片噪声的操作,我们使用腐蚀后的图片也可以,我们使用膨胀后的图片也可以。

7.遍历每个像素点进行颜色替换

图片是由每一个像素点组成的,我们就是要找到腐蚀后得到图片的,白色底色处的像素点,然后将原图中对应位置处的像素点,替换为红色。

import cv2
import numpy as np
# 读取照片
img=cv2.imread('girl.jpg')# 图像缩放
img = cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)# 图片转换为灰度图
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)# 图片的二值化处理
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)
cv2.imshow('erode',erode)dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)#遍历每个像素点,进行颜色的替换
for i in range(rows):for j in range(cols):if erode[i,j]==255: # 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色img[i,j]=(0,0,255) # 此处替换颜色,为BGR通道,不是RGB通道
cv2.imshow('res',img)# 窗口等待的命令,0表示无限等待
cv2.waitKey(0)

效果如下:

如此,我们就完成了一张证件照的底色替换。

背景替换是图像处理方向一个非常基础的应用,在这个代码中,我们用到了图像读写、灰度转换、二值化、腐蚀/膨胀等操作。图像处理还有非常广泛的应用,很多人工智能相关的应用,如自动驾驶、人脸识别等,也都离不开图像处理。以后我们还会分享更多相关案例。如果你有感兴趣的内容,也欢迎在文章下方留言。

------- End -------

点右下角「在看」与转发

是对我们最大的支持

特别推荐下公众号「价值前瞻」,分享读书、成长和投资思考,欢迎来串门。

回复「书单」 可获取精选书单一份,包括《如何阅读 一本书》、《巴菲特之道》、《金字塔原理》、高瓴张磊的《价值》、《投资最重要的事》、《戴维斯王朝》等书籍的笔记内容或思维导图

价 值 前 瞻

做一个有远见的人

扫码关注,查看更多内容

用20行python代码给证件照换底色相关推荐

  1. 基于python的证件照_用20行python代码给证件照换底色

    imread:读取图片: imshow:展示图片: waitkey:设置窗口等待,如果不设置,窗口会一闪而过: imread:读取图片: imshow:展示图片: waitkey:设置窗口等待,如果不 ...

  2. 不到 20 行 Python 代码即可制作精美证件照!不需要去图文店了!

    无论是我们上学时还之后的工作中,基本都需要用到电子证件照片,这类照片基本都对照片尺寸.背景色有要求,本文我们来看一下如何只用不到 20 行 Python 代码完成证件照片的制作. 简介 制作证件照我们 ...

  3. 用 不到 20 行 Python 代码即可制作 精美证件照

    无论是我们上学时还之后的工作中,基本都需要用到电子证件照片,这类照片基本都对照片尺寸.背景色有要求,本文我们来看一下如何只用不到 20 行 Python 代码完成证件照片的制作. 相关文件 小伙伴们可 ...

  4. 20行Python代码爬取王者荣耀全英雄皮肤改进版

    0 写在前面 看了大神的这篇CSDN:20行Python代码爬取王者荣耀全英雄皮肤访问量那么高,忍不住想要蹭一下热点,但是蹭归蹭,总得有点货才行,于是我品我细品,发现其代码总体有三点我觉得值得改进的地 ...

  5. python小游戏代码大全-20行python代码的入门级小游戏的详解

    背景: 作为一个python小白,今天从菜鸟教程上看了一些python的教程,看到了python的一些语法,对比起来(有其他语言功底),感觉还是非常有趣,就随手添了一点内容,改了一个小例程,当着练练手 ...

  6. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

  7. 20行 Python 代码爬取王者荣耀全英雄皮肤 | 原力计划

    作者 | wangweijun 责编 | Elle 出品 | CSDN 博客 引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王 ...

  8. python视频压缩算法_Python入门到精通视频,阿里巴巴大力推荐,20行Python代码,无损压缩千百张图片!...

    阿里巴巴推荐,Python基础入门,Python小白书籍,Python学习路线,Python进阶,Python高级,Python爬虫等等一系列关于Python的文档和视频(包括hadoop,fink, ...

  9. [转载]20行Python代码爬取王者荣耀全英雄皮肤

    20行Python代码爬取王者荣耀全英雄皮肤,这是高手.原文链接: https://blog.csdn.net/qq_42453117/article/details/103190981 除了语言学习 ...

最新文章

  1. Java课程寒假之开发记账本软件(网页版)之二
  2. 聊聊找工作中的项目经验问题(推荐系统和智能问答)
  3. iptables规则备份和恢复、firewalld的9个zone、firewalld关于zone和service操作
  4. 大数据druid查询不支持分页_Klin、Druid、ClickHouse核心技术对比
  5. PHP限制提交文章条数,限制WordPress文章页面修订版本(revision)数量
  6. python 写入第二列_python读写Excel表格的实例代码(简单实用)
  7. Django模型(一)
  8. gaf处理一维故障信号_【推荐文章】改进局部均值分解的齿轮箱复合故障特征提取...
  9. java创建线程池几种方式_Java 创建线程池两种不同方法的比较
  10. vuex传递参数(二)
  11. Automatic Updates服务无法启动
  12. PDF文件如何删除空白页?告诉你两种好方法
  13. uniapp获取屏幕宽度的方式_uni-app如何实现rem自适应手机屏幕尺寸?
  14. 服务器配置的各种英文简称
  15. 轨道六根数的含义汇总
  16. Grib数据转NC数据
  17. 投稿Springer旗下Natural Hazard的时间记载
  18. 【Node.js】写一个数据自动整理成表格的脚本
  19. 【2019.07.09】java 二维数组、将二维数组传递给方法
  20. 5G智能网联路侧设备覆盖率提升探索

热门文章

  1. 计算机系统必须配置,AI运行需要什么电脑配置?(复杂路径,且流畅)
  2. 推荐一款GIF动图制作软件--ScreenToGif
  3. 无法启动此程序因为计算机中丢失d3dx941,d3dx_941.dll最新版
  4. android alarmmanager 收不到广播,关于安卓AlarmManager定时会失效的问题,请指点
  5. unity实现war3真三国无双(一)资源提取
  6. 《CSS 世界》读书笔记-流与宽高
  7. 6.1使用设备树给DM9000网卡_触摸屏指定中断
  8. 2017.07.31软件更新公告
  9. 暗恋一个人是一种什么体验?
  10. Servlet[SpringMVC]的Servlet.init()引发异常