2013-08-05 3 views
1

EmguCV 이미지 오류로 Kinect의 깊이 이미지를 변환하고,이 같은 깊이 스트림에서 EmguCV 이미지를 만들 때 ArgumentException이가 발생했습니다 :난 그냥 키 넥트 이미지 처리에 EmguCV을 사용하기 시작

private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e) 
    { 
     DepthImageFrame df = e.OpenDepthImageFrame(); 
     if (df != null) 
     { 
      short[] data = new short[df.PixelDataLength]; 
      df.CopyPixelDataTo(data); 
      Bitmap b = data.ToBitMap(df.Width, df.Height, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale); 
      Image<Gray, short> im = new Image<Gray, short>(b); //run-time exception here 

ToBitmap 확장 방법이 완전히 복사 키 넥트 SDK 튜토리얼 예에서 :

public static Bitmap ToBitmap(this short[] data, int width, int height, System.Drawing.Imaging.PixelFormat format) 
    { 
     var bitmap = new Bitmap(width, height, format); 

     var bitmapData = bitmap.LockBits(
      new System.Drawing.Rectangle(0, 0, bitmap.Width, 
      bitmap.Height), 
      ImageLockMode.WriteOnly, 
      bitmap.PixelFormat); 
     Marshal.Copy(data, 0, bitmapData.Scan0, data.Length); 
     bitmap.UnlockBits(bitmapData); 
     return bitmap; 
    } 

나는 b가 null이 아닌 유효한 값을 가지고 있음을 확인. 나는 왜이 예외가 발생했는지, 어떤 이미지 형식의 문제인지 궁금하다.

답변

0

한번에 사용하기 :

Image<Gray, byte> im = new Image<Gray, byte>(b); 
+0

는 이미 b'가 무효 인'발견하고 내가 RGB565하는 비트 맵의 ​​형식을 변경할 때 그것은''와 함께 일했다. 하지만 16 비트 정밀도를 유지해야한다면 어떻게해야합니까? 16 비트 그래픽 카드가 없기 때문에 '비트 맵'이 실제로 16 비트 그레이 스케일을 지원하지 않는다고 들었습니다. 사실입니까? 이제 매체 형식으로''을 사용하고 데이터를'short []'에 다시 복사 한 다음'short []'를'BitmapSource'로 직접 변환합니다.이 경우 작동하는지 테스트 해 보겠습니다. 모두에게 감사합니다. – Cherry

관련 문제