Opencv:相同的捕获代码在高端笔记本电脑上提供低 FPS,在 TX1 上提供高 FPS
Opencv: same capture code gives low FPS on a high-end laptop and high FPS on a TX1
从最近的戴尔XPS 9560的内部网络摄像头(1280x720 @ 30fps(捕获时,我出乎意料地获得了非常低的FPS(~16 fps(。
这是我正在使用的简单代码(python3,OpenCV 3.4.0(
import cv2, time
cam = cv2.VideoCapture(0)
n_frames = 0
execution_time = 0
while True:
t_start = time.time()
rv, frame = cam.read()
n_frames+=1
if rv:
#also tried to comment imshow. Same FPS.
cv2.imshow('window', frame)
if cv2.waitKey(1) >= 0:
break
pass
else:
print('Cannot read Frame')
t_end = time.time()
execution_time += (t_end-t_start)*1000
if execution_time > 10000:
print ('avg FPS in 10 seconds: %.2f' % (n_frames*1000/execution_time))
n_frames = 0
execution_time = 0
我尝试用C++编写相同的简单程序,并得到了相同的结果,相同的~16 FPS。
有时,C++和 Python 程序都可以在更短的时间内生成更高的 FPS。
通过使用 i7z 监控 CPU 使用率,我可以看到所有 4 个内核在大部分时间都以非常低的频率运行,接近最低频率,偶尔会出现峰值,似乎对平均 FPS 影响不大。
然后,我将完全相同的代码传输到Jetson TX1上。对于那些不知道它的人来说,它是一个基于ARM的芯片系统,运行专用的Ubuntu 16.10。它连接到USB 2.0相机,1920x1080 @ 25fps。
不用说,我得到了预期的 25 FPS。
谁能解释这种行为?是否与操作系统级别的差异有关?
无论如何如何获得完整的 FPS?
感谢您的帮助
编辑:在VTT评论之后,我将相同的外部(假定为30 fps(USB相机连接到两个系统,并且在两个系统上都获得了15 FPS。这指向蹩脚的相机/USB总线。我需要拆开 jetson 设备内置摄像头并将其连接到笔记本电脑以仔细检查这是否与相机相关。
我出于沮丧而放弃了这个问题,几天前当我在追逐另一个问题时才发现它的答案......我只需要打开灯就能找到答案!
事实证明,我的相机在光线不足时会自动降低其 FPS。当你考虑它时,当曝光时间需要长于 1/30s 时,肯定会发生这种情况。
因此,最后看起来 30fps 应该旨在"最大 fps=30"。但它可以而且将会低于这个数字。在我看来很烦人,太糟糕了,我不得不以艰难的方式学习它。
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 使用 sfml 计算 FPS
- 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最大 5 fps 的速度录制,而不是通常的 30 f
- Unity3D的OpenCV dll调用导致FPS下降
- 直接显示返回错误的帧速率 FPS
- 当我在每一帧中多次使用正则表达式时,FPS 下降了
- 如何在 GLFW 窗口中以固定的 FPS 渲染?
- Opencv:相同的捕获代码在高端笔记本电脑上提供低 FPS,在 TX1 上提供高 FPS
- DirectX矩阵:相对于面向方向的转换(例如在FPS中)
- FPS相机上不需要的胶卷
- 如何使用opencv计算视频的fps(带处理)
- 如何使用C 中的FFMPEG获取视频fps
- Limiting fps with std::chrono
- 修复视频FPS OPENCV
- 测得的 fps 高于理论 fps
- 低FPS与OpenCV视频捕获
- 限制C++中的FPS
- 使用 std::chrono 库来调整应用程序 fps,但会出现奇怪的行为
- 使用OpenCV从文件中更改视频捕获上的fps
- SFML FPS访问窗口事件的问题