使用 wxWidgets 绘制视频流
Drawing a videostream using wxWidgets
我有一个相对简单的应用程序,目前使用 OpenCV 使用 cv::VideoCapture
从相机抓取图像并使用 imshow()
[=31= 在 window 中查看生成的图像] 在 OS X El Capitan 上。
在此期间,我正在做一些基本的图像修改,但这对我的问题并不重要。
由于 OpenCV 实现的 GUI 非常基础,我决定使用 wxWidgets 重做它。我基本上 运行 类似于实现 linked in the tutorial section of wxWidgets. (Updated it to C++11 etc. but the idea is pretty much identical. Code is located on github。)
现在我的问题是:在最好的情况下,我得到的帧率只有 OpenCV 解决方案的一半。 OpenCV 在底层使用 qt。但是当我查看堆栈跟踪时,它归结为使用 CoreGraphics 的类似函数调用。
所以我的问题归结为:在 OS X 上使用 wxWidgets 将图像绘制到帧速率 > 20fps 的 window 的最佳方法是什么?目前我使用 DrawBitmap() 函数。
奖金问题:当我的 Macbook 内部 Retina 屏幕上有 window 时,帧率变得更糟。图片上是否有任何 preprocessing/scaling 我应该做的来减轻 GUI 进程的负载?
最快的可能是使用 OpenGL(虽然我在 OS X 下不太确定这对 OpenGL 不是很友好 AFAIK),但我不确定瓶颈是否真的存在DrawBitmap()
,它可能是首先转换为 wxBitmap
的代码:如果您不使用 raw bitmap access,它可能会很慢。
我有一个相对简单的应用程序,目前使用 OpenCV 使用 cv::VideoCapture
从相机抓取图像并使用 imshow()
[=31= 在 window 中查看生成的图像] 在 OS X El Capitan 上。
在此期间,我正在做一些基本的图像修改,但这对我的问题并不重要。
由于 OpenCV 实现的 GUI 非常基础,我决定使用 wxWidgets 重做它。我基本上 运行 类似于实现 linked in the tutorial section of wxWidgets. (Updated it to C++11 etc. but the idea is pretty much identical. Code is located on github。)
现在我的问题是:在最好的情况下,我得到的帧率只有 OpenCV 解决方案的一半。 OpenCV 在底层使用 qt。但是当我查看堆栈跟踪时,它归结为使用 CoreGraphics 的类似函数调用。
所以我的问题归结为:在 OS X 上使用 wxWidgets 将图像绘制到帧速率 > 20fps 的 window 的最佳方法是什么?目前我使用 DrawBitmap() 函数。
奖金问题:当我的 Macbook 内部 Retina 屏幕上有 window 时,帧率变得更糟。图片上是否有任何 preprocessing/scaling 我应该做的来减轻 GUI 进程的负载?
最快的可能是使用 OpenGL(虽然我在 OS X 下不太确定这对 OpenGL 不是很友好 AFAIK),但我不确定瓶颈是否真的存在DrawBitmap()
,它可能是首先转换为 wxBitmap
的代码:如果您不使用 raw bitmap access,它可能会很慢。