tft每日頭條

 > 生活

 > opencv背景替換

opencv背景替換

生活 更新时间:2024-07-01 14:23:37

在我們的生活中常常要用到各種底色要求的證件電子照,紅底、藍底、或者白底,而假如你手上隻有一種底色的證件照,你又不想再去拍又不會PS怎麼辦?今天教你們用OpenCV和Python給你的證件照換底色。

opencv背景替換(教你用OpenCV和Python給證件照換底色)1

  • Python3
  • numpy函數庫
  • OpenCV庫
  • Windows10 Anaconda Pycharm

opencv背景替換(教你用OpenCV和Python給證件照換底色)2

1.讀取要換底色的圖片

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

import cv2 import numpy as np # 讀取照片并顯示 image=cv2.imread('yang.jpg') cv2.imshow('image',image)

2.對圖片進行縮放

證件照原圖太大,不易顯示,cv2.resize函數進行縮放處理。

# 圖像縮放并顯示 img = cv2.resize(image,None,fx=0.5,fy=0.5) rows,cols,channels = img.shape print(rows,cols,channels) cv2.imshow('img',img)

opencv背景替換(教你用OpenCV和Python給證件照換底色)3

3.将圖片轉換為灰度圖像

cv2.cvtColor函數将讀取的圖像默認是BGR格式轉換為HSV格式,将彩色圖片轉換為hsv灰度圖片,之後才能進行腐蝕和膨脹操作。

# 圖片轉換為灰度圖并顯示 hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) cv2.imshow('hsv',hsv)

opencv背景替換(教你用OpenCV和Python給證件照換底色)4

4.對圖片進行二值化處理

通過cv2.inRange函數對圖片進行二值化操作,獲取背景的mask,二值化處理是為了将灰度圖片轉換為黑白圖片,如下圖将紅色的背景用白色表示,白色區域就是我們後面遍曆像素點替換的條件,就是将白色的區域替換為藍色。

cv2.inRange(hsv, lower_red, upper_red):在lower_red和upper_red兩個阈值内的像素值設置為白色(255),而不在阈值區間内的像素值設置為黑色(0)

# 圖片的二值化處理 #紅底變藍底 #将在兩個阈值内的像素值設置為白色(255),而不在阈值區間内的像素值設置為黑色(0) lower_red= np.array([0,135,135]) upper_red = np.array([180,245,230]) mask = cv2.inRange(hsv, lower_red, upper_red) # 顯示圖像 cv2.imshow('mask',mask) # #藍底變紅底 # 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)

opencv背景替換(教你用OpenCV和Python給證件照換底色)5

5.對圖片進行腐蝕和膨脹

在進行二值化操作之後,我們可以看到黑色區域有一些噪聲,嘴的部分是白的,還有少數白點,就cv2.erode或者cv2.dilate函數對圖片再進行腐蝕和膨脹操作,均可以有效消除噪聲。

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

opencv背景替換(教你用OpenCV和Python給證件照換底色)6

6.遍曆像素點替換背景顔色

對上述進行了腐蝕或者膨脹操作的圖片進行像素點遍曆,将白色區域的像素點的位置,也就是原圖的背景部分的像素的對應的位置,替換成你想要替換的底色即可。

dilate[i,j]==255: 像素點為255表示的是白色,我們就要将白色處的像素點,替換為你想要的照片底色。

img[i,j]=(0,0,255): 此處替換顔色,為BGR通道,不是RGB通道,若是想要将紅底變成藍底img[i,j]=(255,0,0),若是想将藍底變為紅底則img[i,j]=(0,0,255),若是想變白底img[i,j]=(255,255,255)

# 遍曆每個像素點,進行顔色的替換 for i in range(rows): for j in range(cols): if dilate[i,j]==255: #像素點255表示白色 img[i,j]=(255,0,0) # 此處替換顔色,為BGR通道,不是RGB通道 cv2.imshow('res',img) # 窗口等待的命令,0表示無限等待 cv2.waitKey(0)

紅底變藍底

opencv背景替換(教你用OpenCV和Python給證件照換底色)7

藍底變紅底

opencv背景替換(教你用OpenCV和Python給證件照換底色)8

變白底

opencv背景替換(教你用OpenCV和Python給證件照換底色)9

完整代碼,在微信公衆号碼農的後花園回複關鍵字:證件照,下載使用。

更多有關python、深度學習和計算機編程和電腦知識的精彩内容,可以關注碼農的後花園

opencv背景替換(教你用OpenCV和Python給證件照換底色)10

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved