Kinect и EMGU (OpenCV) - проблема с BitmapSource
Хорошо, так что в основном я пытаюсь использовать openCV с Kinect (новый Microsoft Kinect 1.0 SDK). Я очень плохо знаком с C# и Kinect. Но я хочу использовать kinect для распознавания лиц с помощью EMGU (оболочка openCV для C#). До сих пор я успешно захватил видеопоток из kinect, преобразовал его в изображение EMGU<>, а затем преобразовал его в массив 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 - это байт [], преобразованный из изображения<>)
Итак, если я закомментирую код, который выполняет обработку изображений, все преобразования туда и обратно работают нормально. Когда я добавляю код proc изображения, я могу записать в консоль некоторые полезные данные, но изображение не отображается. Я также заметил, что bmapa не обновляется быстро. Это единственное заметное отличие, кроме того, что ничего не отображается на изображении1.
Итак, я неправильно использую BitmapSource или есть способ ускорить мой код или, возможно, медленная "частота обновления" BitmapSource? Потому что, когда я просто конвертирую между структурами данных, я получаю стабильный поток от Kinect, и все работает нормально.
Спасибо брент