使用 EMGU 库处理 Kinect RGB 图像时,我的应用程序速度变慢

My application slows down when processing Kinect RGB images with EMGU library

我目前正在使用带有 C# 的 Kinect SDK(WPF 应用程序)。我需要获取 RGB 流并使用 EMGU 库处理图像。 问题是当我尝试使用 EMGU 处理图像时(例如转换图像格式和更改某些像素的颜色),应用程序速度变慢并且响应时间过长。 我正在使用 8GO RAM / Intel HD graphics 4000 / Intel core i7 。

这是我的简单代码: http://pastebin.com/5frLRwMN

请帮帮我:'(

图像处理总是很慢。如果你以 30fps 的速度执行,你的应用程序挂起是正常的:实时图像处理始终是一个挑战。您可能需要删除一些帧以提高性能(...或者可能切换到本机 C++ 并寻求更快的库)。

我有 运行 相当重的代码(blob 分析)与 Kinect 在每帧的基础上,并且在与你的配置相似的机器上表现出色,所以我相信我们可以排除你的机作为问题。但是,我在您的示例中没有看到任何 EMGU 代码。在您的示例中,您使用一对 for 循环遍历 307k 像素。这自然是一个 运行 的昂贵过程,具体取决于循环中的代码。如您所料,GetPixel 和 SetPixel 是执行起来非常慢的方法。

要加快代码速度,请先将图像转换为 Emgu 图像。然后要访问您的图像,请使用 Byte:

Byte workImageRed = image.Data[x, y, 0];
Byte workImageGreen = image.Data[x, y, 1];
...

第三列是BGR数据。要将像素设置为另一种颜色,请尝试这样的操作:

byte[,,] workIm = image.Data;
workIm[x, y, 0] = 255;
workIm[x, y, 1] = 20;
...

或者,您可以直接将像素设置为颜色:

image[x, y] = new Bgr(Color.Blue);

但是这可能会更慢。