我试图读取/设置我的网络摄像头的fps,并读取从我的网络摄像头捕获的特定帧的时间戳,这让我有点吃力.特别是当我try 使用vc.get(cv2.CAP_PROP_POS_MSEC)vc.get(cv2.CAP_PROP_FPS)vc.get(cv2.CAP_PROP_FRAME_COUNT)时,它们分别返回-1、0、-1.显然,我漏掉了一些东西.有人能帮帮忙吗?代码如下所示:

import os
import time

import cv2
import numpy as np
[...]
# Create a new VideoCapture object
vc = cv2.VideoCapture(0, cv2.CAP_DSHOW)
vc.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
vc.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

# Initialise variables to store current time difference as well as previous time call value
previous = time.time()
delta = 0
n = len(os.listdir("directory"))

# Keep looping
while True:
    timem = vc.get(cv2.CAP_PROP_POS_MSEC)
    fps = vc.get(cv2.CAP_PROP_FPS)
    total_frames = vc.get(cv2.CAP_PROP_FRAME_COUNT)

    print(timem, fps, total_frames)
    # Get the current time, increase delta and update the previous variable
    current = time.time()
    delta += current - previous
    previous = current

    # Check if 3 (or some other value) seconds passed
    if delta > 3:
        # Operations on image
        # Reset the time counter
        delta = 0

        _, img = vc.read()
        [...]
        # press esc to exit
    if cv2.waitKey(20) == 27:
        break

edit:如果我go 掉cv2.CAP_DSHOW,它可以工作,但我不能使用CAP_PROP_FRAME_WIDTH

推荐答案

显然,操作系统(DSHOW)上摄像头的OpenCV后端不会跟踪帧时间戳.

read()之后,只需使用time.perf_counter()或sibling 函数.它已经足够近了,除非你调低读数,否则画面就会变旧.

你可以在OpenCV的GitHub上打开一个问题,然后为DSHOW/MSMF请求这样的功能.人们期望这样的时间戳表示帧被获取的时间,而不是用户程序最终读取它的时间.

Python相关问答推荐

Altair -箱形图边界设置为黑色,中线设置为红色

从 struct 类型创建MultiPolygon对象,并使用Polars列出[list[f64]列

具有2D功能的Python十六进制图

如何在超时的情况下同步运行Matplolib服务器端?该过程随机挂起

ambda将时间戳与组内另一列的所有时间戳进行比较

Python -Polars库中的滚动索引?

在Python中对分层父/子列表进行排序

我从带有langchain的mongoDB中的vector serch获得一个空数组

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

. str.替换pandas.series的方法未按预期工作

发生异常:TclMessage命令名称无效.!listbox"

如何让Flask 中的请求标签发挥作用

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

在Mac上安装ipython

ThreadPoolExecutor和单个线程的超时

Python列表不会在条件while循环中正确随机化'

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

Python避免mypy在相互引用中从另一个类重定义类时失败

OpenGL仅渲染第二个三角形,第一个三角形不可见

通过追加列表以极向聚合