本文實例為大家分享了python實現(xiàn)摳圖給證件照換背景的具體代碼,供大家參考,具體內(nèi)容如下
import cv2 import numpy as np import matplotlib.pyplot as plt #建立顯示圖片的函數(shù) def show(image): plt.imshow(image) plt.axis('off') plt.show() #導(dǎo)入前景圖 img=cv2.imread('font.jpg') #圖片導(dǎo)入 img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #轉(zhuǎn)換顏色模型 print(img.shape) #打印圖片規(guī)格 show(img) #顯示圖片 #導(dǎo)入背景圖 back_img = cv2.imread('back.jpg') #圖片導(dǎo)入 back_img = cv2.cvtColor(back_img,cv2.COLOR_BGR2RGB) #轉(zhuǎn)換顏色模型 print(back_img.shape) #打印圖片規(guī)格 show(back_img) #顯示圖片 #裁剪圖片 #img = img[0:1000,150:550] #裁剪圖片大小 #show(img) #顯示圖片 #縮放圖片 #print(img.shape) #打印圖片規(guī)格 #img=cv2.resize(img,None,fx=0.9,fy=0.9) #圖片縮小10% #print(img.shape) #打印圖片規(guī)格 #拆分圖片信息 rows,cols,channels = img.shape #拆分圖片信息 #轉(zhuǎn)換格式 img_hsv = cv2.cvtColor(img,cv2.COLOR_RGB2HSV) #把圖片轉(zhuǎn)換成HSV格式,用于摳圖 show(img_hsv) #顯示圖片 #摳圖 lower_blue=np.array([0,0,0]) #獲取最小閾值 upper_blue=np.array([0,255,255]) #獲取最大閾值 mask = cv2.inRange(img_hsv, lower_blue, upper_blue) #創(chuàng)建遮罩 show(mask) #顯示遮罩 erode=cv2.erode(mask,None,iterations=3) #圖像腐蝕 show(erode) #顯示圖片 dilate=cv2.dilate(erode,None,iterations=1) #圖像膨脹 show(dilate) #顯示圖片 opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (8,8))) #開運算 show(opening) #顯示圖片 center = [400,800] #設(shè)置前景圖開始位置 for i in range(rows): for j in range(cols): if opening[i,j]==0: #代表黑色 back_img[center[0]+i,center[1]+j] =img[i,j] #賦值顏色 show(back_img) #顯示圖片 back_img = cv2.cvtColor(back_img,cv2.COLOR_RGB2BGR) #圖像格式轉(zhuǎn)換 back_img=cv2.resize(back_img,None,fx=0.8,fy=0.8) #圖像縮放20% cv2.imwrite('result.png',back_img) #保存圖像
完整源碼:python實現(xiàn)摳圖給證件照換背景源碼
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
