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

时间:2015-02-24 13:19:34

标签: c# wpf sdk kinect emgucv

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

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

请帮助我:'(

2 个答案:

答案 0 :(得分:1)

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

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

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);

但这可能会慢一些。

答案 1 :(得分:0)

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