相关疑难解决方法(0)

Python3 在网络摄像头 fps 处处理和显示网络摄像头流

如何读取相机并以相机帧速率显示图像?

我想从我的网络摄像头连续读取图像(进行一些快速预处理),然后在窗口中显示图像。这应该以我的网络摄像头提供的帧速率(29 fps)运行。OpenCV GUI 和 Tkinter GUI 似乎太慢了,无法以这样的帧速率显示图像。这些显然是我实验中的瓶颈。即使没有预处理,图像的显示速度也不够快。我在 MacBook Pro 2018 上。

这是我尝试过的。网络摄像头始终使用 OpenCV 读取:

  • 一切都发生在主线程中,图像以 OpenCV 显示:12 fps
  • 读取相机并在单独的线程中进行预处理,在主线程中使用 OpenCV 显示图像:20 fps
  • 像上面一样多线程,但不显示图像:29 fps
  • 像上面一样多线程,但使用 Tkinter 显示图像:不知道确切的 fps,但感觉 <10 fps。

这是代码:

单循环,OpenCV GUI:

import cv2
import time


def main():
    cap = cv2.VideoCapture(0)
    window_name = "FPS Single Loop"
    cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)

    start_time = time.time()
    frames = 0

    seconds_to_measure = 10
    while start_time + seconds_to_measure > time.time():
        success, img = cap.read()
        img = img[:, ::-1]  # mirror
        time.sleep(0.01)  # simulate some processing …
Run Code Online (Sandbox Code Playgroud)

python multithreading opencv tkinter python-3.x

8
推荐指数
1
解决办法
2081
查看次数

标签 统计

multithreading ×1

opencv ×1

python ×1

python-3.x ×1

tkinter ×1