91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于OpenCV python3怎么實現證件照換背景的方法

發布時間:2021-05-07 13:44:42 來源:億速云 閱讀:206 作者:小新 欄目:開發技術

小編給大家分享一下基于OpenCV python3怎么實現證件照換背景的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

軟件環境:

python3.5
opencv2
windows 10

圖像載入

導入opencv庫,使用imread函數讀取圖片

import cv2
import numpy as np

img=cv2.imread('zjz.jpg')

由于證件照太大,不方便顯示,故進行縮放

#縮放
rows,cols,channels = img.shape
img=cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
cv2.imshow('img',img)

原圖如下

基于OpenCV python3怎么實現證件照換背景的方法
(圖片源于網絡,已經馬賽克處理,如有侵權,私信立即刪除)

獲取背景區域

首先將讀取的圖像默認BGR格式轉換為HSV格式,然后通過inRange函數獲取背景的mask。
HSV顏色范圍參數可調節根據這篇文章

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)

獲得的mask如下圖

基于OpenCV python3怎么實現證件照換背景的方法 

如圖所示藍色的背景在圖中用白色表示,白色區域就是要替換的部分,但是黑色區域內有白點干擾,所以進一步優化。
腐蝕和膨脹

#腐蝕膨脹
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow('erode',erode)
dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)

經過腐蝕和膨脹操作后如下圖

基于OpenCV python3怎么實現證件照換背景的方法 

處理后圖像單獨白色點消失。

替換背景色

遍歷全部像素點,如果該顏色為dilate里面為白色(255)則說明該點所在背景區域,于是在原圖img中進行顏色替換。

#遍歷替換
for i in range(rows):
 for j in range(cols):
  if dilate[i,j]==255:
   img[i,j]=(0,0,255)#此處替換顏色,為BGR通道
cv2.imshow('res',img)

最終結果如下

基于OpenCV python3怎么實現證件照換背景的方法
(圖片源于網絡,已經馬賽克處理,如有侵權,私信立即刪除)

總結

最開始想直接通過遍歷全圖進行替換背景色,但是圖像中難免有些像素點和背景色一樣,造成了干擾,導致最后結果不盡人意,所以想通過這種方法進行處理。顯然最后有明顯的ps痕跡。

最后貼上完整代碼,不足之處歡迎各位指正!

import cv2
import numpy as np

img=cv2.imread('zjz.jpg')
#縮放
rows,cols,channels = img.shape
img=cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
cv2.imshow('img',img)

#轉換hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow('Mask', mask)

#腐蝕膨脹
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 dilate[i,j]==255:
   img[i,j]=(0,0,255)#此處替換顏色,為BGR通道
cv2.imshow('res',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

以上是“基于OpenCV python3怎么實現證件照換背景的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

改则县| 高唐县| 棋牌| 梁平县| 宜良县| 青海省| 望奎县| 龙江县| 温泉县| 大埔区| 曲靖市| 达拉特旗| 清徐县| 榕江县| 利津县| 伊春市| 盐边县| 南涧| 崇仁县| 金沙县| 翁牛特旗| 油尖旺区| 顺昌县| 乐昌市| 呼图壁县| 七台河市| 广昌县| 永新县| 日照市| 永泰县| 玉环县| 岢岚县| 峨边| 张家界市| 思南县| 伊春市| 双柏县| 桐梓县| 塔河县| 会东县| 鄂伦春自治旗|