我在 Mac OS X 10.10.2 上使用 opencv c++ 来处理视频帧并显示它们。使用 waitKey 来显示视频的 imshow 的性能极其缓慢。
我有以下代码,它可以正确显示高清 (1920x1080) 灰度帧,只是它的运行速度慢了大约 10 倍(即每秒 2 到 3 帧,而不是每秒 30 帧)。
cv::Mat framebuf[TEST_COUNT];
//--- Code here to allocate and fill the frame buffer with about 4 seconds of video. This part works correctly.
//--- This loop runs too slow by factor of approximately 10x
for (int f = 0; f < TEST_COUNT; f++)
{
cv::imshow(windowName, framebuf[f]);
cv::waitKey(33);
}
谁能建议如何从 opencv imshow() 获得实时或接近实时的性能?我看到很多帖子都说他们正在实时显示视频甚至比实时更快,所以我不确定我做错了什么。任何帮助将不胜感激。
我可能是错的,但对我来说,问题不在于你的代码,而在于你的操作系统/配置。我写了一个小测试:
import cv2
import numpy as np
from random import randrange
img = np.zeros((1920, 1080), dtype = np.uint8)
counter = 0
while counter < 1000:
cv2.line(img, (randrange(0, 1920), randrange(0, 1080)), (randrange(0, 1920), randrange(0, 1080)), (randrange(0, 255)))
cv2.imshow('test', img)
temp = cv2.waitKey(1)
counter += 1
print counter
在我的机器(Core 2 duo 2.6Ghz x64、8GB RAM、SSD)上,此测试大约需要 30 秒才能完成。运行它,如果你得到的时间明显多于你的笔记本电脑/opencv配置等肯定有问题。我在 Mac OS X 上使用过 OpenCV 2.4.x(我认为是 10.9)并且运行良好。重新安装 OpenCV 是我想到的最明显的解决方案。当你删除OpenCV后,使用brew重新安装它 -brew install opencv --with-tbb --with-python --with-ffpmeg
(或类似的东西 - 检查使用brew options opencv
) 应该没事。第一个选项告诉brew使用tbb(线程构建块 - 多线程库,有时可以显着提高速度)构建opencv,第二个选项安装python包装器,最后一个选项安装ffmpeg(处理编解码器等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)