Kinect и EMGU (OpenCV) - проблема с BitmapSource - PullRequest
2 голосов
/ 17 февраля 2012

Хорошо, поэтому в основном я пытаюсь использовать 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, и все работает отлично.

Спасибо, Брент

...