Ниже найдите минимальный воспроизводимый код.
Код: Выделить всё
cap = cv.VideoCapture("C:\\Users\\USER_NAME\\Downloads\\example_01.mp4")
# Print the capture properties to console
for i in range(19):
print( i, cap.get(i))
h = 480
w = 640
frameArea = h*w
areaTH = frameArea/250
print( 'Area Threshold', areaTH)
# Entry / exit lines
line_up = int(1*(h/5))
line_down = int(2*(h/5))
up_limit = int(0.5*(h/5))
down_limit = int(2.5*(h/5))
#Background Subtractor
fgbg = cv.createBackgroundSubtractorMOG2(detectShadows = True)
while(cap.isOpened()):
ret, frame = cap.read()
try:
ret,imBin= cv.threshold(fgmask,200,255,cv.THRESH_BINARY)
ret,imBin2 = cv.threshold(fgmask2,200,255,cv.THRESH_BINARY)
#Opening (erode-> dilate) to remove noise.
mask = cv.morphologyEx(imBin, cv.MORPH_OPEN, kernelOp)
mask2 = cv.morphologyEx(imBin2, cv.MORPH_OPEN, kernelOp)
#Closing (dilate -> erode) to join white regions.
mask = cv.morphologyEx(mask , cv.MORPH_CLOSE, kernelCl)
mask2 = cv.morphologyEx(mask2, cv.MORPH_CLOSE, kernelCl)
except:
print('EOF')enter code here
print( 'UP:',cnt_up)
print ('DOWN:',cnt_down)
break
contours0, hierarchy =
cv.findContours(mask2,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
for cnt in contours0:
area = cv.contourArea(cnt)
if area > areaTH:
#################
# TRACKING #
#################
M = cv.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
x,y,w,h = cv.boundingRect(cnt)
new = True
if cy in range(up_limit,down_limit):
for i in persons:
if abs(x-i.getX())
Подробнее здесь: [url]https://stackoverflow.com/questions/67279629/occupancy-counter-using-opencv[/url]