2012-02-07 1 views
0

현재 Emblem CV 및 Kinect for Windows SDK v1을 사용하는 얼굴 인식 WPF 응용 프로그램에서 작업 중입니다. Emgu CV로 이전에 동일한 응용 프로그램을 만들었지 만 웹캠을 사용하여 이미지 프레임을 캡처했습니다. 웹캠을 사용하면 카메라 프레임을 가져 와서 Emc CV의 이미지 <> 형식으로 변환하여 얼굴 인식 알고리즘으로 처리 할 수 ​​있습니다. 하지만 지금, 컬러 RGB 카메라를 Kinect 하드웨어로 사용할 때, 그렇게 할 수 없습니다. ImageColorFrame 유형 (Windows 용 Kinect SDK)에서 Image <> (Emgu CV) 유형으로 암시 적 또는 명시 적 변환이 작동하지 않습니다. 내가 어떻게 할 수 있니?Kinect for Windows SDK v1에서 ImageColorFrame의 유형을 Emgu Cv의 이미지 <> 유형으로 변환하는 방법은 무엇입니까?

참고로 변환하는 대신 아래 코드 에서처럼 <> 이미지 유형의 bytes 속성을 지정하려고합니다. 그러나 그것은 효과가 없습니다. 미리 감사드립니다.

using (ColorImageFrame colorFrame = e.OpenColorImageFrame()) 
     { 
      if (colorFrame == null) 
      { 
       return; 
      } 

      byte[] pixels = new byte[colorFrame.PixelDataLength]; 
      colorFrame.CopyPixelDataTo(pixels); 

      nextFrame = new Image<Bgr, byte>(448, 336); 
      nextFrame.Bytes = pixels; 
      using (nextFrame.Bitmap = colorFrame.ToBitmap()) 
      { 
       grayImage = new Image<Gray, byte>(448, 336); 
       grayImage = nextFrame.Convert<Gray, Byte>(); 
       HaarCascade faceHaarCascade = new HaarCascade("" + Environment.CurrentDirectory + "\\haarcascade_frontalface_alt_tree.xml"); 

       MCvAvgComp[][] facesDetected = grayImage.DetectHaarCascade(
        faceHaarCascade, 
        1.1, 
        10, 
        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
        new System.Drawing.Size(20, 20)); 

       foreach (MCvAvgComp face in facesDetected[0]) 
       { 
        // draw rectangle in the facial image 
        nextFrame.Draw(face.rect, new Bgr(System.Drawing.Color.Blue), 2); 
       } 
       imageVideoRGB.Source = ToBitmapSource(nextFrame); 
      } 
     } 
+0

이 답변 : HTTP :를 //stackoverflow.com/a/10848309/1039947는 ColorImageFrame에서 비트 맵을 가져와 nextFrame = new Image를 시도하는 방법을 보여줍니다. (ImageToBitmap (colorFrame)); (ImageToBitmap 메서드는 해당 답변에 있음) – kmp

답변

0

Emgu.CV.Image에 Microsoft.Kinect.ImageColorFrame을 변환하려면, 당신은 이것을 시도한다 : KinectHelpers와

var bitmapSource = colorImageFrame.ToBitmapSource(); // using Coding4Fun.Kinect.Wpf extension 
//Get a bitmap 
var currentImage = KinectHelpers.GetBitmapFromBitmapSource(ColorBitmap); 
// Then get the Image 
var image = new Image<Bgr, Byte>(currentImage) 

정적 클래스 :

public static class KinectHelpers 
{ 
    public static Bitmap GetBitmapFromBitmapSource(BitmapSource bSource) 
    { 
     Bitmap bmp; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      BitmapEncoder enc = new BmpBitmapEncoder(); 
      enc.Frames.Add(BitmapFrame.Create(bSource)); 
      enc.Save(ms); 
      bmp = new Bitmap(ms); 
     } 
     return bmp; 
    } 
}