OpenCV:09车辆统计项目( 四 )

< 5000: # 用面积的话误差较大if (w < min_w) and (h < min_h) :continuecv2.rectangle(frame,(int(x),int(y)),(int(x+w),int(y+h)),(0,255,255),2)# 把车抽象为一个点 ——> 即外接矩形的中心点# 要通过外界矩形计算矩形中心点 ——> 我们把这段代码独立出来,写成函数my_center = center(x,y,w,h)cv2.circle(frame,(my_center),5,(0,255,255),-1) # 画出中心点# 记录下当前的点,并且用中心点的y坐标和检测线加上偏移量进行对比,如果坐标在区间内,则检测到车辆,否则不算cars.append(my_center) # 将中心点追加到列表中# 遍历cars中的点,与检测线的要求进行对比for (x , y) in cars:if (y >= line_high - offset) and (y <= line_high + offset): # 落入了有效区间# 计数加1car_num += 1# 统计过的车就remove掉 (如果remove,会出现一部车辆多次计数的情况)cars.remove((x,y))#print(car_num) # 统计结果正常# 显示车辆统计信息cv2.putText(frame,'Vehicle Count:' + str(car_num) ,(200,60),cv2.FONT_HERSHEY_SIMPLEX,2,(0,0,255),3)# 展示#cv2.imshow('video',close) # 显示识别到的前景fgmask(不是写frame!)cv2.imshow('frame',frame) # 退出key = cv2.waitKey(10) # 每隔1ms接受用户按下的按键# 用户按‘ESC’即可退出if key == 27:break# 最后别忘了释放资源cap.release()cv2.destroyAllWindows()# 左右两车道分别计数效果会好一点:左边线往下一点 右边线往上一点# 我们需要不停地挑检测线和检测轮廓的参数
结果: