如何正确统计车辆数量?

how to properly count the number of vehicles?

我有一个半径为 10 米的圆。我要统计进入圈内的车辆数量呢(距离中心车的距离<=10m) 我是正确的 。我可以用工具栏"Minitor"统计当前清算的车辆数量xe.nhung"minitor"远大于实际通过圆圈的车辆数量。我通过 "total-cars" 附加了 "minitor"。 如何正确统计车辆数量?

 ask cars
  [
    if distancexy 0 0 < 10
    [
      set total-cars (total-cars + 1)
    ]
  ]

我不太确定你的问题,但也许这段代码可以帮助你:

set total-cars count cars with [distancexy 0 0 <= 10]

您可以直接在monitor控件中使用如下代码:

count cars with [distancexy 0 0 <= 10]
import cv2
import time

bgsMOG = cv2.createBackgroundSubtractorMOG2(detectShadows=False)
kernal=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
cap = cv2.VideoCapture(0)
counter =0
time.sleep(2)
if cap:
    while True:

        ret, frame = cap.read()

        if ret:

            #fgmask = bgsMOG.apply(frame, None, 0.01)
            blur = cv2.GaussianBlur(frame, (5, 5), 0)
            fgmask = bgsMOG.apply(blur)
            morhpho = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernal)

            #line for detection
            cv2.line(frame,(20,270),(320,270),(175,175,0),5)
            _,contours, hierarchy = cv2.findContours(morhpho,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

            ax1=20 #coordinate of line where vehicle will be count if intersect
            ay1=270
            ax2=320
            ay2=270

            try: hierarchy = hierarchy[0]
            except: hierarchy = []

            #for contour, hier in zip(contours, hierarchy):
            for (i, contour) in enumerate(contours):

                (x,y,w,h) = cv2.boundingRect(contour)

                if w > 20 and h > 25:

                    rec=cv2.rectangle(frame, (x,y), (x+w,y+h), (180, 0, 0), 1)

                    x1=w/2 #to find centroid
                    y1=h/2
                    cx=x+x1
                    cy=y+y1
                    centroid=(cx,cy)
                    M = cv2.moments(contour)
                    cX = int(M["m10"] / M["m00"])
                    cY = int(M["m01"] / M["m00"])

                    # draw the contour and center of the shape on the image
                    cv2.circle(frame, (cX, cY), 2, (255, 255, 255), -1)
                    cv2.circle(frame,(int(cx),int(cy)),1,(0,255,0),-1)
                    dy=cY-270 #my first code to increase counter
                    print("centroid",cX,":",cY)
                if dy==0:
                    if (cX<=320)and(cX>=20):
                        counter=counter+1
                        print("1st ct",counter)
                        print len(contour)
                        #FileName = "D:/data/" + str(y) + ".jpg"
                        #cv2.imshow("cropped",rec)
                        #cv2.imwrite(FileName,rec)

                if cy==270:
                    if centroid > (27, 268) and centroid < (325, 285):
                        if (cX <= 320) and (cX >= 20):
                            counter =counter+1
                            print "counter=", counter
                            if cY > 10 and cY < 250:
                                cv2.putText(frame, str(counter),(10,150),cv2.FONT_HERSHEY_SIMPLEX,2, (255, 0, 0), 1, True)


        #cv2.resizeWindow('Output',320,180)
        cv2.imshow('Output', frame)
        cv2.imshow('mor', morhpho)
        cv2.imshow('blur', blur)

        #cv2.imshow('FGMASK', morhpho)


        key = cv2.waitKey(1)
        if key == ord('q'):
            break
cap.release()
cv2.destroyAllWindows()