python - 捕获帧时的 OpenCV 输入延迟

标签 python opencv

我编写了一个代码来启用使用 OpenCV 从网络摄像头提要中捕获图像。但是,每当我按下键捕获我的帧时,都会出现输入延迟。当我使用它退出时没有延迟,但是当我使用捕获时有一个明显的延迟。我通过在两种情况下打印声明来衡量这一点,按下 c该语句在打印之前需要延迟。在我看来,这个问题类似于......相机资源正在被使用并且没有及时释放以供下一次按键或类似的事情......但不确定。

import cv2 as cv
import numpy as np
import glob
import matplotlib.pyplot as plt

cap = cv.VideoCapture(1)

img_counter = 0

while True:
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # cv.imshow('frame',frame)
    cv.imshow('gray', gray)
    if not ret:
        break

    if cv.waitKey(1) & 0xFF == ord('q'):
        print('helloq')
        break

    elif cv.waitKey(1) & 0xFF == ord('c'):
        print('hello{}'.format(img_counter))
        img_name = "opencv_frame_{}.png".format(img_counter)
        cv.imwrite(img_name, gray)
        img_counter += 1


我正在使用外部网络摄像头,并且cv2.__version__ = 3.4.2`

最佳答案

解决了您的问题,似乎是由您的 key 检查引起的。

您不应多次调用 waitKey(1)。它会导致滞后。

试试这个解决方案:

cap = cv.VideoCapture(0)

img_counter = 0

while True:
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # cv.imshow('frame',frame)
    cv.imshow('gray', gray)
    if not ret:
        break

    key = cv.waitKey(1)

    if key==ord('c'):
        print('img{}'.format(img_counter))
        img_name = "opencv_frame_{}.png".format(img_counter)
        cv.imwrite(img_name, gray)
        img_counter += 1
        print("Succesfully saved!")

    if key==ord('q'):
        print('Closing cam...')
        break

# When everything done, release the capture
cap.release()
cv.destroyAllWindows()

关于python - 捕获帧时的 OpenCV 输入延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59704719/

相关文章:

python - 当我尝试使用一个函数来替换幂函数时不断收到错误,即当提高到 1/2 时

python - 在 Python 中打开一个没有换行符的大型 JSON 文件进行 csv 转换 Python 2.6.6

c++ - 如何将 OpenCV IplImage 转换为 SDL_Surface?

c++ - 从标记的姿势相机的姿势

android - Android 上的 OpenCV 眼动追踪

python xml文件到pandas数据框

python - 从 google.colab 导入文件,如何在 Jupyterlab 中获得相同的文件行为

python - Pandas:将 YYYYQQ 值的索引转换为日期时间对象

c++ - OpenCV - 网络摄像头 imshow 不显示实时提要,而是灰色屏幕

java - 为什么我的程序在视频第一帧后终止?