如何在背景减法中计算前景区域的像素数
Posted
技术标签:
【中文标题】如何在背景减法中计算前景区域的像素数【英文标题】:How to calculate pixel number of foreground area in background subtraction 【发布时间】:2021-12-21 04:57:29 【问题描述】:我使用背景减法技术创建了一个分割。下一步我要做的是消除像素数example frame
【问题讨论】:
OpenCV 有一个 findContours 和一个 connectedComonents 函数(它们中的任何一个)都可以为您提供不同“区域”的列表。在提取区域之前,您可能希望使用扩张和侵蚀来改善您的面具(例如,将头部与身体连接起来),但要找到好的参数可能具有挑战性。对于每个区域,您可以使用 contourArea 函数或计算非黑色像素。 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:您可以使用findContours
和contourArea
。像这样的:
import cv2 as cv
import numpy as np
# change 0 to 1 for shadow detection
backSub = cv.createBackgroundSubtractorMOG2(500,16,0)
capture = cv.VideoCapture("path/to/video.mp4")
if not capture.isOpened():
print('Unable to open video')
exit(0)
while True:
ret, frame = capture.read()
if frame is None:
break
fgMask = backSub.apply(frame)
cv.rectangle(frame, (10, 2), (100,20), (255,255,255), -1)
# this part is what you are looking for:
contours, hierarchy = cv.findContours(fgMask, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
# create an empty mask
mask = np.zeros(frame.shape[:2],dtype=np.uint8)
# loop through the contours
for i,cnt in enumerate(contours):
# if the size of the contour is greater than a threshold
if cv.contourArea(cnt) > 20:
cv.drawContours(mask,[cnt], 0, (255), -1)
cv.imshow('Frame', frame)
cv.imshow('FG Mask', fgMask)
cv.imshow("Mask", mask)
keyboard = cv.waitKey(30)
if keyboard == 'q' or keyboard == 27:
break
【讨论】:
以上是关于如何在背景减法中计算前景区域的像素数的主要内容,如果未能解决你的问题,请参考以下文章