好吧,基本上我正在尝试使用openCV和Kinect(微软的新Kinect 1.0 SDK) . 我对C#和Kinect都很陌生 . 但我想要做的是使用kinect进行面部识别,使用EMGU(openCV包装器用于C#) . 到目前为止,我已成功捕获来自kinect的视频流,将其转换为EMGU Image <>,然后将其转换为Byte []数组,以便我可以使用BitmapSource在屏幕上显示我的图像 .

虽然工作正常,但当我尝试使用Image <>类实际进行一些图像处理时,似乎会出现问题 . 它实际上似乎处理正常,但它不是很快 . 这对我来说不一定是个问题,但现在根本没有显示BitmapSource .

以下是我检测面部代码的示例:

img = new Image<Bgr, byte>(clone);
haar = new HaarCascade("directory");

Image<Gray, Byte> gray;
using (HaarCascade face = new HaarCascade("blablabla.xml"))
using (HaarCascade eye = new HaarCascade("blarg.xml"))
{

using ( gray = img.Convert<Gray, Byte>()) //Convert it to Grayscale
{
  MCvAvgComp[] facesDetected = face.Detect(gray, 1.1, 1,  mgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new System.Drawing.Size(img.Width / 8, img.Height / 8));
  foreach (MCvAvgComp f in facesDetected)
  {
    img.Draw(f.rect, new Bgr(System.Drawing.Color.Blue), 2);
    imgDoneProc = img.ToBitmap();
  }
 }
}

然后我使用BitmapSource.Create():

BitmapSource bmapa = BitmapSource.Create(PImage.Width, PImage.Height, 96, 96, PixelFormats.Bgr32, null, bmpBytes, PImage.Width * PImage.BytesPerPixel);

image1.Source = bmapa;

(PImage是来自Kinect的流; bmpBytes是从Image <>转换的Byte [])

因此,如果我注释掉执行图像处理的代码,那么来回的所有转换都可以正常工作 . 当我添加图像proc代码时,我可以向控制台写入一些有用的数据,但不显示图像 . 我也注意到'bmapa'没有快速更新 . 除了image1中没有显示任何内容之外,这是唯一明显的区别 .

那么,我是否错误地使用了BitmapSource,或者是否有办法加快我的代码速度或者降低BitmapSource的“刷新率”?因为当我只是在数据结构之间进行转换时,我从kinect获得了稳定的流,并且一切正常 .

谢谢,布伦特