【问题标题】:Distinct People Counting using OpenCV Python使用 OpenCV Python 进行不同人数统计
【发布时间】:2021-05-05 08:45:20
【问题描述】:

我有一个代码可以检测视频中的汽车并对其进行计数,但出现了问题。如果同一辆车出现在接下来的帧中,它们会再次被计算在内。我尝试了不同的资源,但没有找到任何有效的答案。

我的代码

import cv2
backsub = cv2.bgsegm.createBackgroundSubtractorMOG()
capture = cv2.VideoCapture("C:/Users/chr04/Desktop/People and car counting/Car Counting/car video/video2.mp4")
best_id=0
i = 0
car = 0
if capture:
  while True:

    ret, frame = capture.read()
    if ret:
        fgmask = backsub.apply(frame, None, 0.01)
        contours, hierarchy = cv2.findContours(fgmask.copy(), cv2.RETR_EXTERNAL,
                                           cv2.CHAIN_APPROX_NONE)
        try: hierarchy = hierarchy[0]
        except: hierarchy = []
        for contour, hier in zip(contours, hierarchy):
            (x,y,w,h) = cv2.boundingRect(contour)
            if w > 20 and h > 20:
                best_id+=1
                cv2.rectangle(frame, (x,y), (x+w,y+h), (255, 0, 0), 2)
                cv2.putText(frame, str(best_id), (x,y-5), cv2.FONT_HERSHEY_SIMPLEX,
                        0.5, (255, 0, 0), 2)
        print(best_id)        
        cv2.imshow("Track", frame)
        cv2.imshow("background sub", fgmask)
    key = cv2.waitKey(10)
    if key == ord('q'):
            break

【问题讨论】:

    标签: python-3.x opencv computer-vision


    【解决方案1】:

    您需要一次又一次地重置循环中的计数器变量(当您逐帧获取图像时)。这似乎是这里的问题。

    我从您的代码中了解到best_id 是您的计数器变量。因此,只需在循环内初始化此变量(best_id=0if ret 语句之后的 while 循环内),您的代码就可以正常工作,因为您需要重置此计数器以便它可以再次开始计数来自0,如下所示。

    if ret:
        #initializing best_id variable
        best_id = 0
        fgmask = backsub.apply(frame, None, 0.01)
        contours, hierarchy = cv2.findContours(fgmask.copy(), cv2.RETR_EXTERNAL,
                                               cv2.CHAIN_APPROX_NONE)
    
    

    【讨论】:

    • 您能否在答案中添加一些代码提示以便更好地理解?
    • 让我试试。谢谢
    • 同样的问题。实际上我不想在下一帧中检测和计算同一辆车。
    • 对不起,我自己好像犯了一个错误。我已经编辑了我的答案。在while 循环内的if ret: 语句中初始化best_id 变量,这肯定可以工作。
    • 仍然在下一帧检测到同一辆车。我只想要“如果下一帧出现同一辆车,那么它就不会被检测到”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多