gpt4 book ai didi

python - BeagleBone Black OpenCV Python 太慢了

转载 作者:太空狗 更新时间:2023-10-30 00:48:42 25 4
gpt4 key购买 nike

我尝试使用 opencv 和 python 从网络摄像头获取图像。代码非常基本,例如:

import cv2
import time
cap=cv2.VideoCapture(0)
cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH,640)
cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT,480)
cap.set(cv2.cv.CV_CAP_PROP_FPS, 20)

a=30
t=time.time()
while (a>0):
now=time.time()
print now-t
t=now
ret,frame=cap.read()
#Some processes
print a,ret
print frame.shape
a=a-1
k=cv2.waitKey(20)
if k==27:
break
cv2.destroyAllWindows()

但它运行缓慢。程序输出:

VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
HIGHGUI ERROR: V4L: Property <unknown property string>(5) not supported by device
8.82148742676e-06
select timeout
30 True
(480, 640, 3)
2.10035800934
select timeout
29 True
(480, 640, 3)
2.06729602814
select timeout
28 True
(480, 640, 3)
2.07144904137
select timeout

配置:

  • Beaglebone Black RevC
  • Debian-wheezly
  • opencv 2.4
  • python 2.7

最佳答案

在使用 OpenCV 处理视频流时获得更高 FPS 的“秘诀”是将 I/O(即从相机传感器读取帧)移动到一个单独的线程。

当调用 read() 方法和 cv2.VideoCapture 函数时,整个过程非常慢,因为它必须等待每个 I/O 操作完成完成以继续下一个 ( Blocking Process )。

为了实现 FPS 增加/延迟减少,我们的目标是将帧读取从网络摄像头或 USB 设备转移到完全不同的线程,与我们的主要 Python 脚本完全分开。

这将允许从 I/O 线程连续读取帧,同时我们的根线程处理当前帧。一旦根线程处理完它的帧,它只需要从 I/O 线程获取当前帧。这是在无需等待阻塞 I/O 操作的情况下完成的。

您可以阅读 Increasing webcam FPS with Python and OpenCV了解实现线程的步骤。


编辑

根据我们评论中的讨论,我觉得您可以按如下方式重写代码:

import cv2

cv2.namedWindow("output")
cap = cv2.VideoCapture(0)

if cap.isOpened(): # Getting the first frame
ret, frame = cap.read()
else:
ret = False

while ret:
cv2.imshow("output", frame)
ret, frame = cap.read()
key = cv2.waitKey(20)
if key == 27: # exit on Escape key
break
cv2.destroyWindow("output")

关于python - BeagleBone Black OpenCV Python 太慢了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com