python opencv给证件照换底色
生活随笔
收集整理的這篇文章主要介紹了
python opencv给证件照换底色
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
昨天朋友忙要把白色背景的證件照換為紅色的,比較急用,本人也不太會用PS,網上的那些轉換小工具都是要收費的,就想著自己搞一搞,原理很簡單,白色背景的像素值為[255,255,255],用這個信息生成mask,再將生成的Mask對應回原圖像將背景區域換為紅色的像素值[256,0,0]即可實現。
read image
def read_source_image(image_path):img = cv2.imread(image_path)return imgresize
def resize(img,height,whight):return cv2.resize(img,(whight,height))生成mask
def generator_mask(img):""":param img: source image:return: mask"""mask = np.zeros_like(img)row,col,channels = img.shapefor i in range(row):for j in range(col):if sum(img[i, j]) == 255 * 3:mask[i, j] = (255, 255, 255)else:mask[i, j] = [0, 0, 0]# Gaussian Blurmask = cv2.GaussianBlur(mask, (7, 7), 0)return mask白色轉紅色
def white_to_red(img,mask):""":param img: source image:param mask: mask image:return: red background image"""img_copy = np.zeros_like(img)row, col, channels = img.shapefor i in range(row):for j in range(col):if sum(mask[i,j]) != 0:img_copy[i,j] = [0,0,255]else:img_copy[i,j] = img[i,j]return img_copy白色轉藍色
def white_to_blue(img,mask):""":param img: source image:param mask: mask image:return: Blue background image"""img_copy = np.zeros_like(img)row, col, channels = img.shapefor i in range(row):for j in range(col):if sum(mask[i,j]) != 0:img_copy[i,j] = [255,0,0]else:img_copy[i,j] = img[i,j]return img_copy我自己轉出來的結果還可以,但是在人的邊緣位置上還是能夠看到有瑕疵,所以在mask生成里面做了高斯模糊,實驗驗證是有用的,經過高斯模糊之后生成的圖像質量改了很多,但在真用的時候還是會有一些問題,比如背景并不是純白色的時候,分割就會有問題,后面有時間的話可以考慮用分割的方法來繼續完善這個小工具。
總結
以上是生活随笔為你收集整理的python opencv给证件照换底色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch实现U-net视网膜血管分
- 下一篇: 基于U-net的肝脏肿瘤分割实战(Pyt