2014-07-08 1 views
1

현재 포스트 프로세싱 목적으로 골격 데이터뿐만 아니라 컬러 프레임 이미지도 저장하려고합니다. 현재 이것은 컬러 비디오를 처리하고 UI에서 컬러 이미지를 출력하는 코드 섹션입니다. 컬러 프레임 이미지를 저장해야하는 곳입니다.Kinect C# VS 2013을 사용하여 컬러 프레임 저장

private void ColorFrameEvent(ColorImageFrameReadyEventArgs colorImageFrame) 
{ 
    //Get raw image 
    using (ColorImageFrame colorVideoFrame = colorImageFrame.OpenColorImageFrame()) 
    { 
     if (colorVideoFrame != null) 
     { 
      //Create array for pixel data and copy it from the image frame 
      Byte[] pixelData = new Byte[colorVideoFrame.PixelDataLength]; 
      colorVideoFrame.CopyPixelDataTo(pixelData); 

      //Set alpha to 255 
      for (int i = 3; i < pixelData.Length; i += 4) 
      { 
       pixelData[i] = (byte)255; 
      } 

      using (colorImage.GetBitmapContext()) 
      { 
       colorImage.FromByteArray(pixelData); 
      } 
     } 
    } 
} 

OpenCV, EmguCV 및 멀티 스레딩을 읽으려고했습니다. 그러나 나는 꽤 혼란 스럽다. 한 곳에서 견고하고 좋은 설명을하는 것이 좋을 것입니다. 그러나 프레임 당 초당 프레임을 잃지 않고이 작업을 수행하는 가장 좋은 방법은 배열 목록에 모든 이미지를 저장하는 것입니다. 그리고 프로그램이 완료되면 배열 -> 이미지 -> 비디오 Matlab.

누군가가 컬러 이미지 스트림을 파일로 저장하는 구현 방법에 대해 의견을 개진 할 수 있습니까?

답변

0

모든 것이 원활하게 진행되면 30 초 (30fps)로 ColorImageFrameReady 이벤트가 트리거됩니다. 한 번에 모든 사진을 저장하는 것이 다소 부담 스럽다고 생각합니다.

Backgroundworker을 사용하는 것이 좋습니다. 작업자가 바쁜지 확인하고 백그라운드 작업자에게 바이트를 전달하고 마법을 수행하지 않는지 확인할 수 있습니다.

바이트 []에서 이미지를 쉽게 저장하거나 만들 수 있습니다. 그냥 구글.

http://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv

How to compare two images using byte arrays