视频的cv2帧数给出不同的结果

问题描述

我尝试检测视频中的物体。视频格式为AVI。我使用以下代码检查视频的帧数:

import cv2 
  
data = cv2.VideoCapture("C:/Users/video.avi")  
frames = data.get(cv2.CAP_PROP_FRAME_COUNT)
print("Frame Number:",frames ) 

帧数计算为 90022。然后我运行这个代码

import cv2 
vid = cv2.VideoCapture("C:/Users/video.avi")

count = 0
ret,frame = vid.read()
while ret:
    count += 1

    cv2.imshow('frame',frame)

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

    ret,frame = vid.read()

print(count)
vid.release()
cv2.destroyAllWindows()

计数计算为 18005。为什么结果彼此不同?我想计算检测的确切时间。我需要知道检测到的物体在视频的几秒钟内。由于帧数不同,我无法做到。

解决方法

我认为第二个 ret,frame = vid.read() 有问题。试试这个,它对我有用:

方法#1:

import cv2

video = cv2.VideoCapture("video.mp4") # .avi
count = 0
while True:
    ret,frame = video.read()
    if not ret:
        break
    count += 1

print(count)
video.release()

方法#2:

video = cv2.VideoCapture("video.mp4") # .avi
length = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
print(length)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...