获取由OpenCV,Python捕获的视频文件的时间戳

时间:2019-01-28 07:56:21

标签: python opencv timestamp video-capture

我正在为以下任务编写代码: 1)拍摄包括人脸在内的视频文件 2)侦测人脸 3)裁剪脸部,并将其另存为新的视频文件(仅脸部)

该程序包括一个GUI,其工作方式如下: A)当用户单击“记录”按钮时,人脸检测开始(它将此时间戳保存为start_time) B)当用户单击“停止”按钮时,人脸检测结束(应将此时间戳另存为end_time)

程序的另一个输出是保存或打印start_timeend_time

我知道如何创建GUI,但我的问题不是。我在获取start_timeend_time时遇到问题。

以下是代码的主要部分,不包括GUI部分:

import cv2

video_filename = 'Sample.wmv'

cap = cv2.VideoCapture(video_filename)
print('length = ', cap.get(cv2.CAP_PROP_FRAME_COUNT), '\n')
print('fps = ', cap.get(cv2.CAP_PROP_FPS), '\n')

cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascPath)

ResultPath = 'output.wmv'

frame_size = (200, 200)   # Final frame size to save video file

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter(ResultPath, fourcc, fps = 25.0, frameSize = frame_size)

start = cap.get(cv2.CAP_PROP_POS_MSEC)

while(cap.isOpened()):

    ret, frame = cap.read()

    if ret==True:

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # Detect faces in the image
        faces = faceCascade.detectMultiScale(
                gray,
                scaleFactor=1.1,
                minNeighbors=5,
                minSize=(30, 30),
                )

        # Crop face
        for (x, y, w, h) in faces:
            face_frame = frame[y:y+h, x:x+w]
            face_frame = cv2.resize(face_frame, frame_size)

            # write the face_frame
            out.write(face_frame)

        cv2.imshow('frame', frame)

        if cv2.waitKey(25) & 0xFF == ord('q'):
            break

    else:
        print('Video capture finished')
        end = cap.get(cv2.CAP_PROP_POS_MSEC)
        break

cap.release()
out.release()
cv2.destroyAllWindows()

print('Start time : ', start, '\n')
print('End time : ', end, '\n')

输入视频文件'Sample.wmv'的长度为12秒,帧速率为每秒15帧。我的意思是捕获“ Sample.wmv”的整个12秒来测试代码。

结果如下:

length =  12356.0 

fps =  1000.0 

The video capture finished

Start_time :  1.0 

End_time :  360.0  

可以看出,当输入视频文件的帧频为15时,fps打印为1000.0。此外,end_time为360毫秒。但是,输入影片的总时长为12秒。

请让我知道您对悖论结果的想法!

0 个答案:

没有答案