日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

2020-11-06 Python OpenCV给证件照换底色

發布時間:2025/3/21 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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给证件照换底色的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。