【发布时间】:2016-04-05 20:44:24
【问题描述】:
我在 Windows 机器上使用 Visual C++ 表单和 OpenCV 编写了一个图像处理应用程序。一切似乎都正常,但显示图像非常慢 - 只有几帧。我希望能够达到30左右。我目前使用的是标准imshow(...),后跟waitkey(1)。
我的问题是:是否有更好(即更快)的方式将图像从内存中获取到显示器。
openCV 使用的 Mat 结构本质上是一个花哨的标头,指向一个连续的 unsigned char 值块。
编辑: 我使用 VS2013 分析器测试了我的代码,它声称我在 imshow/waitkey 中花费了 50% 的执行时间。
我在 OpenCV Q/A 论坛上看到了几个关于这个问题的讨论,他们总是以“你不应该使用 imshow 除了调试”结束,但没有人建议使用其他任何东西,所以我想我会在这里试试。
伙计
【问题讨论】:
-
您是如何得出
imshow和waitKey是瓶颈的结论?您是否分析了您的代码?或者至少有时间吗?您是否在发布版本中对其进行测试? -
运行 this little test 在 i7-4930K 和不错的 nVidia 卡上运行 1600x1200 图像给我大约 55 FPS。如果您想自己绘制图像,最快的方法是 OnPaint 处理程序中的 BitBlt。我不使用 Windows 窗体,但我使用了 got a snippet 和 WTL,它非常接近 Windows API。修改它以适合您的目的应该不会太难。
-
发布模式与调试相比有点帮助(我自己应该想到的),
-
我可能是它花费大部分时间的处理算法本身。图像尺寸是多少?算法是什么样的?
-
图像为 5.5MP 16 位,来自 sCMOS 相机。
标签: opencv visual-c++ display