我在Windows机器上使用Visual C ++表单和OpenCV编写了一个图像处理应用程序。一切似乎都运行正常,但显示图像非常慢 - 只有几个fps。我希望能够达到30左右。我目前正在使用标准imshow(...)
,后跟waitkey(1)
。
我的问题是:是否有更好(即更快)的方式将图像从内存传输到显示器。
openCV使用的Mat结构本质上是一个指向unsigned char
值的连续块的花式标题。
修改 我使用VS2013探查器测试了我的代码,它声称我在imshow / waitkey中花费了50%的执行时间。
我在OpenCV Q / A论坛上看到了几个关于此问题的讨论,他们总是以#34;除了调试之外你不应该使用imshow"但没有人建议使用其他任何东西,所以我想我会在这里试试。
人
答案 0 :(得分:2)
如果没有看到你所拥有的东西,我将采用这种方法来实现你想要的东西。
有专门的线程从相机获取帧。将获取的帧插入到同步队列中,该队列由以下队列使用:
图像处理线程。从队列中取出帧,将它们处理成适合显示的图像。它会更改同步的输出图像,并通知GUI。
Main(GUI)线程仅用于显示。当通知图像更新时,它将同步的输出图像与其当前工作图像交换。 (为了避免复制和额外分配,我们只重用这两个图像缓冲区。)然后它使窗口无效。在WM_PAINT处理程序中,它然后使用BitBlt
显示图像。
一些注意事项:
waitKey
中的睡眠而想要更简单的事情,请查看this question