2020-11-06 Python OpenCV给证件照换底色
投簡歷、找工作這些事都需要證件照,有些還要求證件照背景顏色、尺寸大小,本文分享一下如果通過Python OpenCV來實現照片裁剪和更換背景色
1、讀取照片
?
import cv2import?numpy?as?np# 讀取照片image = cv2.imread('1.jpg')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)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()5、圖片去噪
黑白色的照片周圍可能有黑色小點噪聲。這種情況下需要去除背景色噪聲,選用膨脹。
膨脹即對圖片高亮色進行膨脹。周圍只有有一個為1,即是1;再進行腐蝕,縮小圖片尺寸。即閉運算操作。
不同的圖片噪聲不一樣,如是前景色人物含有小白點,則進行開運算操作。
這次顏色的圖片中因為顏色分明,不存在明顯噪音,如果去除噪音可以采用下面方法
???????
# 閉運算k = np.ones((5, 5), np.uint8)r = cv2.morphologyEx(heibai, cv2.MORPH_CLOSE, k)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()總結
以上是生活随笔為你收集整理的2020-11-06 Python OpenCV给证件照换底色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python OpenCV 图片拆分与拼
- 下一篇: 网络带宽和速度测试windows和lin