下面是一些代码行。使用HOG检测器检测人员,并在检测到人员时绘制绿色矩形。所以我把imshow保存下来。但它会保存所有帧,而不是仅保存人检测到的帧。我只想在有人发现时保存帧。
while True:
ret, frame = cap.read()
frame = frame[0:420, 400:690]
found,w=hog.detectMultiScale(frame, winStride=(8,8), padding=(16,16), scale=1.05)
draw_detections(frame,found):
timestamp = time.strftime("%Y-%m-%d %H-%M-%S")
cv2.imwrite("person %s.jpg" % timestamp, frame)
cv2.imshow('people',frame)
ch = 0xFF & cv2.waitKey(1)
if ch == 27:
break
cv2.destroyAllWindows()
答案 0 :(得分:0)
您应该使用条件语句。
如果found
能够检测到框架中的任何行人,则变量w
和hog.detectMultiScale()
返回值数组。
例如,当我尝试使用此代码处理具有4个人的图像时,found
返回了4个人的边界框的数组:
found
array([[240, 95, 200, 399],
[123, 106, 203, 405],
[203, 294, 84, 168],
[166, 300, 81, 162]], dtype = int32)
w
返回检测到的人可能性的数组
w
array([[0.66943627],
[0.85531924],
[0.75906293],
[0.66459513]])
代码:
while True:
ret, frame = cap.read()
frame = frame[0:420, 400:690]
found, w = hog.detectMultiScale(frame, winStride=(8,8), padding = (16,16), scale = 1.05)
if w: #--- change is made here ---
timestamp = time.strftime("%Y-%m-%d %H-%M-%S")
cv2.imwrite("person %s.jpg" % timestamp, frame)
cv2.imshow('people', frame)
ch = 0xFF & cv2.waitKey(1)
if ch == 27:
break
cv2.destroyAllWindows()