python?opencv背景減去法摳圖實現(xiàn)示例
更新時間:2022年05月12日 09:17:12 作者:WTRD
這篇文章主要為大家介紹了python?opencv背景減去法摳圖實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
導(dǎo)包
import cv2 from matplotlib import pyplot as plt import numpy as np
導(dǎo)圖
imA=cv2.imread("target.png")
plt.imshow(cv2.cvtColor(imA,cv2.COLOR_BGR2RGB))
imA.shape #(2436, 1125, 3)

imBG=cv2.imread("bg_30061.jpg")
plt.imshow(cv2.cvtColor(imBG,cv2.COLOR_BGR2RGB))

預(yù)處理
# Step 1 預(yù)處理
# 日常縮放圖像,背景圖要縮放到和圖A意一樣大
imBG=cv2.resize(imBG,(1125,2436),interpolation=cv2.INTER_CUBIC)
# 后續(xù)代碼都是基于灰度圖像操作的
imA_gray=cv2.cvtColor(imA,cv2.COLOR_BGR2GRAY)
imBG_gray=cv2.cvtColor(imBG,cv2.COLOR_BGR2GRAY)
# 背景減去
sub=imBG_gray.astype("int32")-imA_gray.astype("int32")
sub=np.absolute(sub).astype("uint8")
plt.imshow(cv2.cvtColor(sub,cv2.COLOR_BGR2RGB))

二值化圖像
# Step 2 二值化圖像 thresh=cv2.adaptiveThreshold(sub,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,19,5) ## 圖像二值化有很多種方法, adaptiveThreshold 是基于局部的,最后兩個參數(shù),19,5 決定了邊緣檢測的清晰度 thresh=cv2.erode(thresh,None,iterations=2) thresh=cv2.dilate(thresh,None,iterations=2) # 膨脹腐蝕,主要是消去噪聲點,同時邊緣封閉(邊緣不封閉,無法完全填充) plt.figure(num="thresh") plt.imshow(cv2.cvtColor(thresh,cv2.COLOR_BGR2RGB)) plt.close

邊緣檢測
# Step 3 邊緣檢測
cnts,hierarchy=cv2.findContours(thresh.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
len(cnts)
area=[]
for i in cnts:
cnt_area = cv2.contourArea(i)
area.append(cnt_area)
# 通過面積大小,找到需要的邊緣的 index,這里為 866
mask=np.zeros([2436,1125],dtype=np.uint8)
mask[:,:]=255
res=cv2.drawContours(mask,cnts,866,(0,0,225),2)
plt.imshow(cv2.cvtColor(res,cv2.COLOR_BGR2RGB))
# 畫出邊緣

填充輪廓并制作掩模
# 填充輪廓并制作掩模 mask2=np.zeros([2436,1125],dtype=np.uint8) mask2[:,:]=0 res2=cv2.drawContours(mask2,cnts,866,255,cv2.FILLED) plt.imshow(cv2.cvtColor(res2,cv2.COLOR_BGR2RGB))

保存
# 保存為 png
h,w,c=imA.shape
b,g,r=cv2.split(imA)
imA_2=np.zeros((4,h,w),dtype=imA.dtype)
imA_2[0][0:h,0:w]=b
imA_2[1][0:h,0:w]=g
imA_2[2][0:h,0:w]=r
imA_2[3][0:h,0:w]=mask2
imA_new=cv2.merge(imA_2)
cv2.imwrite("imA_new.png",imA_new)

以上就是python opencv背景減去法摳圖實現(xiàn)示例的詳細內(nèi)容,更多關(guān)于python opencv背景減去法摳圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python Sweetviz輕松實現(xiàn)探索性數(shù)據(jù)分析
Sweetviz是一個開放源代碼Python庫,可生成精美的高密度可視化文件,以單行代碼啟動EDA(探索性數(shù)據(jù)分析)。輸出是一個完全獨立的HTML應(yīng)用程序,該系統(tǒng)圍繞快速可視化目標(biāo)值和比較數(shù)據(jù)集而構(gòu)建。其目標(biāo)是幫助快速分析目標(biāo)特征,訓(xùn)練與測試數(shù)據(jù)以及其他此類數(shù)據(jù)表征任務(wù)2021-11-11
python pygame實現(xiàn)球球大作戰(zhàn)
這篇文章主要為大家詳細介紹了Python pygame實現(xiàn)球球大作戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
Python轉(zhuǎn)為C語言并編譯生成二進制文件的教程詳解
這篇文章主要為大家詳細介紹了將Python轉(zhuǎn)為C語言并編譯生成二進制文件的相關(guān)教程,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-12-12
python的reverse函數(shù)翻轉(zhuǎn)結(jié)果為None的問題
這篇文章主要介紹了python的reverse函數(shù)翻轉(zhuǎn)結(jié)果為None的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python解析Chrome瀏覽器歷史瀏覽記錄和收藏夾數(shù)據(jù)
大家好,本篇文章主要講的是python解析Chrome瀏覽器歷史瀏覽記錄和收藏夾數(shù)據(jù),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02

