![](/img/trans.png)
[英]How to remove background noise while performing OpenCV Image subtraction?
[英]How to remove background from an image (subtraction)?
我有以下幾點:
在這種情況下,我想要一個只有鏡頭蓋的圖像。 我怎樣才能減去這兩個圖像? 我認為 OpenCV 很適合這個問題,但我在減去這些圖像時遇到了問題。
我在本教程中發現了類似的東西: https://docs.opencv.org/3.4/d1/dc5/tutorial_background_subtraction.ZFC35FDC70D5FC69D269883A822C7A53E之前,/之后他們正在談論
鏈接的教程(幾乎)完成了這項工作,你有一個兩幀的“視頻”,所以只需將這兩幀輸入到所述背景減法器:看看會發生什么:
import cv2
from skimage import io # Only needed for web grabbing images, use cv2.imread for local images
# Read images from web
img_bg = cv2.cvtColor(io.imread('https://i.stack.imgur.com/rMoqy.jpg'), cv2.COLOR_RGB2BGR)
img = cv2.cvtColor(io.imread('https://i.stack.imgur.com/oyrKo.jpg'), cv2.COLOR_RGB2BGR)
# Set up and feed background subtractor (cf. tutorial linked in question)
backSub = cv2.createBackgroundSubtractorMOG2()
_ = backSub.apply(img_bg)
mask = backSub.apply(img)
# Morphological opening and closing to improve mask
mask_morph = cv2.morphologyEx(mask, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (21, 21)))
mask_morph = cv2.morphologyEx(mask_morph, cv2.MORPH_CLOSE, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (21, 21)))
# Generate output
output = cv2.bitwise_and(img, img, None, mask_morph)
# Visualization
cv2.imshow('img', img)
cv2.imshow('mask', mask)
cv2.imshow('mask_morph', mask_morph)
cv2.imshow('output', output)
cv2.waitKey(0)
cv2.destroyAllWindows()
背景減法器生成的mask
如下所示:
所以,我們需要一些形態學的開閉來改進掩碼,參見cv2.morphologyEx
。 然后,修改后的mask_morph
如下所示:
使用cv2.bitwise_and
和掩碼,我們得到所需的output
:
請注意,帽子下方的較寬邊緣主要來自陰影,如教程中所述。
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.