当检测到人时如何在opencv python中保存框架

时间:2018-07-09 08:28:24

标签: opencv

下面是一些代码行。使用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()

1 个答案:

答案 0 :(得分:0)

您应该使用条件语句。

如果found能够检测到框架中的任何行人,则变量whog.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()