我正在使用Python的OpenCV库进行帧切片,并且能够成功地从正在测试的视频中创建帧。
我正在安装在停车场入口入口处的闭路电视摄像机上,视频以24x7播放,有时汽车静止不动几分钟,导致同一辆车连续出现帧。
我的问题是,只有当新车进入停车场时,如何才能创建框架?
答案 0 :(得分:0)
Stackoverflow用于与代码相关的查询。建议您在此处发布任何内容之前,尝试一些代码并分享您的结果和问题。话虽如此,您可以从this之类的对象检测教程开始,然后以sort进行跟踪。提供了许多预训练的模型,其中包括汽车课,因此您甚至不需要训练新模型。
答案 1 :(得分:0)
您需要检测车牌等吗?或者只是注意是否发生了什么?对于后者,您可以使用非常简单的方法。取最近30秒的平均帧数,然后从当前帧中减去。如果增量图像的平均绝对平均值高于阈值,则可能是您要寻找的更改。
答案 2 :(得分:0)
您可以使用opencv进行一些更简单的运动检测,https://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/
中对此进行了很好的解释因此,如果您有背景图片作为参考,则可以将每个新图像与背景进行比较,并且仅在与背景的差异足够大时才保存图像(希望只有在进入汽车时才保存)。然后将其设为新背景,并在新图像再次开始看起来像原始背景时重置新车。
希望我的想法很清楚,该链接提供了足够的信息来实施它。如果不是,只是要求澄清!
答案 3 :(得分:0)
首先,您必须具有特定的xml才能仅检测汽车。您可以从here获取它。我开发了一个代码,目的是唯一地识别和计数您正在使用的cctv可见的汽车,有时它也完全取决于帧速率和检测,因此您可以控制帧速率以及总计数变量。
import cv2
cascade_src = 'cars.xml'
cap = cv2.VideoCapture('rtsp_of_ur_cctv')
car_cascade = cv2.CascadeClassifier(cascade_src)
prev_count=0
total_count=0
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectMultiScale(gray, 1.1, 1)
if len(cars)>prev_count:
diffrence=len(cars)-prev_count
total_count=total_count+diffrence
#here yo can save unique new entry and possibly avoid the recursive ones
print(total_count)
for (x,y,w,h) in cars:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
prev_count=len(cars)
cv2.imshow('video', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()