使用OpenCV统计视频中的帧数...(Python)

-1 投票
1 回答
5282 浏览
提问于 2025-04-18 07:51

我正在用Python和OpenCV来处理一个视频文件,想要访问视频的每一帧。在访问每一帧的时候,我会把帧的索引添加到一个列表里。

但是,当我比较这个列表的大小和通过

Frames = cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)

命令得到的帧数时,发现列表的大小总是比视频的帧数少一个元素。

你们知道这是为什么吗?

这是我使用的代码:

# -*- coding: utf-8 -*-
import cv2

def faceExtraction(inputFile, extractionRate):

cap = cv2.VideoCapture(inputFile)
fps = cap.get(cv2.cv.CV_CAP_PROP_FPS)
Frames = cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)
print 'Frames='+str(Frames)
# if not os.path.exists("registered_face"):
        # os.makedirs("registered_face")

frame_counter = 0

outputFrameIndices=[]
while(cap.isOpened()):


        frame_counter=frame_counter+1
        ret, frame = cap.read()  # read current frame
        outputFrameIndices.append(frame_counter)
        if frame is None:
                break


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

            # print 'FACE NOT FOUND: frame '+ str(frame_counter)
# When everything done, release the capture

cap.release()
cv2.destroyAllWindows()



print 'number of frames: ' + str(len(outputFrameIndices))

############## Executing Main App ###########
faceExtraction('Video Filename blah blah',5)

我的代码输出的结果是:

帧数=930.0

实际帧数:929

而它应该是:

帧数=930.0

实际帧数:930

1 个回答

1

找到了错误... 在Python中,索引计数是从零开始的...

撰写回答