Python 如何给我为数人而画的矩形编号?
我使用了混合高斯算法,而不是用树影法来清除阴影,然后用轮廓线来寻找白色物体。然后我在它们周围画了矩形。现在我想给这些长方形加上数字,我想用数字来追踪长方形,以便计算人数 这是我使用的代码,如果你能给我一些关于计数的想法,那就太棒了Python 如何给我为数人而画的矩形编号?,python,opencv,counting,Python,Opencv,Counting,我使用了混合高斯算法,而不是用树影法来清除阴影,然后用轮廓线来寻找白色物体。然后我在它们周围画了矩形。现在我想给这些长方形加上数字,我想用数字来追踪长方形,以便计算人数 这是我使用的代码,如果你能给我一些关于计数的想法,那就太棒了 import numpy as np import cv2 import sys video_path = 'video.avi' cv2.ocl.setUseOpenCL(False) version = cv2.__version__.split('.')[0]
import numpy as np
import cv2
import sys
video_path = 'video.avi'
cv2.ocl.setUseOpenCL(False)
version = cv2.__version__.split('.')[0]
print(version)
cap = cv2.VideoCapture(video_path)
if version == '2' :
fgbg = cv2.BackgroundSubtractorMOG2()
if version == '3':
fgbg = cv2.createBackgroundSubtractorMOG2()
while (cap.isOpened):
ret, frame = cap.read()
if ret==True:
fgmask = fgbg.apply(frame)
ret1,th1 = cv2.threshold (fgmask,150,200,cv2.THRESH_BINARY)
if version == '2' :
(contours, hierarchy) = cv2.findContours(th1.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
if version == '3' :
(im2, contours, hierarchy) = cv2.findContours(th1.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
if cv2.contourArea(c) < 500:
continue
(x, y, w, h) = cv2.boundingRect(c) cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('foreground and background',th1)
cv2.imshow('rgb',frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
将numpy导入为np
进口cv2
导入系统
视频路径='video.avi'
cv2.ocl.setUseOpenCL(错误)
version=cv2.\uuuuuuuuuuuuuuuuu版本\uuuuuuuuuu.split('.')[0]
印刷品(版本)
cap=cv2.视频捕获(视频路径)
如果版本==“2”:
fgbg=cv2.BackgroundSubtractorMOG2()
如果版本==“3”:
fgbg=cv2.createBackgroundSubtractorMOG2()
而(盖等厚):
ret,frame=cap.read()
如果ret==True:
fgmask=fgbg.apply(帧)
ret1,th1=cv2.threshold(fgmask,150200,cv2.THRESH_二进制)
如果版本==“2”:
(等高线,层次)=cv2.findContours(th1.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
如果版本==“3”:
(im2,轮廓,层次)=cv2.FindContentours(th1.copy(),cv2.RETR\u EXTERNAL,cv2.CHAIN\u APPROX\u SIMPLE)
对于等高线中的c:
如果cv2.轮廓面积(c)<500:
持续
(x,y,w,h)=cv2.边界矩形(c)cv2.矩形(框架,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow(“前景和背景”,th1)
cv2.imshow('rgb',帧)
如果cv2.waitKey(1)&0xFF==ord(“q”):
打破
第1章释放()
cv2.destroyAllWindows()
Simplyprint len(等高线)
可以得到等高线的数量。我想数一数屏幕上有多少人,然后给他们数字(ID)。我不知道在哪里放置print len(等高线)来获得等高线的数量。Simplyprint len(等高线)
将获得轮廓数。我想数一数屏幕上有多少人,然后给他们数字(ID)。我不知道在哪里放置打印镜头(轮廓)以获得轮廓数。