【问题标题】:My application slows down when processing Kinect RGB images with EMGU library使用 EMGU 库处理 Kinect RGB 图像时,我的应用程序变慢
【发布时间】:2015-02-24 13:19:34
【问题描述】:

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

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

请帮帮我:'(

【问题讨论】:

  • 请帮帮我:'(

标签: c# wpf sdk kinect emgucv


【解决方案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);

不过这可能会更慢。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2011-11-11
      • 1970-01-01
      相关资源
      最近更新 更多