服务器之家

服务器之家 > 正文

20行代码教你用python给证件照换底色的方法示例

时间:2021-09-02 00:18     来源/作者:Huang supreme

1.图片来源

该图片来源于百度图片,如果侵权,请联系我删除!图片仅用于知识交流。

20行代码教你用python给证件照换底色的方法示例

2.读取图片并显示

  • imread():读取图片;
  • imshow():展示图片;
  • waitkey():设置窗口等待,如果不设置,窗口会一闪而过;
  1. import cv2
  2. import numpy as np
  3. # 读取照片
  4. img=cv2.imread('girl.jpg')
  5.  
  6. # 显示图像
  7. cv2.imshow('img',img)
  8.  
  9. # 窗口等待的命令,0表示无限等待
  10. cv2.waitKey(0)

效果如下:

20行代码教你用python给证件照换底色的方法示例

3.图片缩放

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

  1. import cv2
  2. import numpy as np
  3. # 读取照片
  4. img=cv2.imread('girl.jpg')
  5.  
  6. # 图像缩放
  7. img = cv2.resize(img,None,fx=0.5,fy=0.5)
  8. rows,cols,channels = img.shape
  9. print(rows,cols,channels)
  10.  
  11. # 显示图像
  12. cv2.imshow('img',img)
  13.  
  14. # 窗口等待的命令,0表示无限等待
  15. cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

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

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

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

  1. import cv2
  2. import numpy as np
  3. # 读取照片
  4. img=cv2.imread('girl.jpg')
  5.  
  6. # 图像缩放
  7. img = cv2.resize(img,None,fx=0.5,fy=0.5)
  8. rows,cols,channels = img.shape
  9. print(rows,cols,channels)
  10. cv2.imshow('img',img)
  11.  
  12. # 图片转换为二值化图
  13. hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  14.  
  15. # 显示图像
  16. cv2.imshow('hsv',hsv)
  17.  
  18. # 窗口等待的命令,0表示无限等待
  19. cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

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)将图片进行二值化操作。
  1. import cv2
  2. import numpy as np
  3. # 读取照片
  4. img=cv2.imread('girl.jpg')
  5.  
  6. # 图像缩放
  7. img = cv2.resize(img,None,fx=0.5,fy=0.5)
  8. rows,cols,channels = img.shape
  9. print(rows,cols,channels)
  10. cv2.imshow('img',img)
  11.  
  12. # 图片转换为灰度图
  13. hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  14. cv2.imshow('hsv',hsv)
  15.  
  16. # 图片的二值化处理
  17. lower_blue = np.array([90,70,70])
  18. upper_blue = np.array([110,255,255])
  19. mask = cv2.inRange(hsv, lower_blue, upper_blue)
  20.  
  21. # 显示图像
  22. cv2.imshow('mask',mask)
  23.  
  24. # 窗口等待的命令,0表示无限等待
  25. cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

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

6.图象的腐蚀和膨胀

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

  • erode(mask,None,iterations=1)进行腐蚀操作。
  • dilate(erode,None,iterations=1)进行膨胀操作。
  1. import cv2
  2. import numpy as np
  3. # 读取照片
  4. img=cv2.imread('girl.jpg')
  5.  
  6. # 图像缩放
  7. img = cv2.resize(img,None,fx=0.5,fy=0.5)
  8. rows,cols,channels = img.shape
  9. print(rows,cols,channels)
  10. cv2.imshow('img',img)
  11.  
  12. # 图片转换为灰度图
  13. hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  14. cv2.imshow('hsv',hsv)
  15.  
  16. # 图片的二值化处理
  17. lower_blue=np.array([90,70,70])
  18. upper_blue=np.array([110,255,255])
  19. mask = cv2.inRange(hsv, lower_blue, upper_blue)
  20.  
  21. #腐蚀膨胀
  22. erode=cv2.erode(mask,None,iterations=1)
  23. cv2.imshow('erode',erode)
  24.  
  25. dilate=cv2.dilate(erode,None,iterations=1)
  26. cv2.imshow('dilate',dilate)
  27.  
  28. # 窗口等待的命令,0表示无限等待
  29. cv2.waitKey(0)

结果如下:

20行代码教你用python给证件照换底色的方法示例

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

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

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

  1. import cv2
  2. import numpy as np
  3. # 读取照片
  4. img=cv2.imread('girl.jpg')
  5.  
  6. # 图像缩放
  7. img = cv2.resize(img,None,fx=0.5,fy=0.5)
  8. rows,cols,channels = img.shape
  9. print(rows,cols,channels)
  10. cv2.imshow('img',img)
  11.  
  12. # 图片转换为灰度图
  13. hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
  14. cv2.imshow('hsv',hsv)
  15.  
  16. # 图片的二值化处理
  17. lower_blue=np.array([90,70,70])
  18. upper_blue=np.array([110,255,255])
  19. mask = cv2.inRange(hsv, lower_blue, upper_blue)
  20.  
  21. #腐蚀膨胀
  22. erode=cv2.erode(mask,None,iterations=1)
  23. cv2.imshow('erode',erode)
  24.  
  25. dilate=cv2.dilate(erode,None,iterations=1)
  26. cv2.imshow('dilate',dilate)
  27.  
  28. #遍历替换
  29. for i in range(rows):
  30. for j in range(cols):
  31. if erode[i,j]==255: # 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色
  32. img[i,j]=(0,0,255) # 此处替换颜色,为BGR通道,不是RGB通道
  33. cv2.imshow('res',img)
  34.  
  35. # 窗口等待的命令,0表示无限等待
  36. cv2.waitKey(0)

效果如下:

20行代码教你用python给证件照换底色的方法示例

到此这篇关于20行代码教你用python给证件照换底色的方法示例的文章就介绍到这了,更多相关python 证件照换底色内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_41261833/article/details/107071806

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部