Advertisement
lamiastella

Converter.cpp

May 23rd, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #define NOMINMAX
  2. #define _WINSOCKAPI_  
  3.  
  4. #include "Converter.h"
  5.  
  6.  
  7.  
  8. /***
  9. Returns the next frame if next frame is recorded
  10. Returns the previous frame if next frame is not recorded
  11. ***/
  12. void Converter::ConvertPXCImageToOpenCVMat(Intel::RealSense::Image *inImg, cv::Mat *outImg){
  13.  
  14.     int cvDataType;
  15.     int cvDataWidth;
  16.  
  17.  
  18.     Intel::RealSense::Image::ImageData data;
  19.     inImg->AcquireAccess(Intel::RealSense::Image::ACCESS_READ, &data);
  20.     Intel::RealSense::Image::ImageInfo imgInfo = inImg->QueryInfo();
  21.  
  22.     switch (data.format) {
  23.  
  24.     case Intel::RealSense::Image::PIXEL_FORMAT_YUY2:
  25.     case Intel::RealSense::Image::PIXEL_FORMAT_NV12:
  26.         throw(0); // Not implemented
  27.     case Intel::RealSense::Image::PIXEL_FORMAT_RGB32:
  28.         cvDataType = CV_8UC4;
  29.         cvDataWidth = 4;
  30.         break;
  31.     case Intel::RealSense::Image::PIXEL_FORMAT_RGB24:
  32.         cvDataType = CV_8UC3;
  33.         cvDataWidth = 3;
  34.         break;
  35.     case Intel::RealSense::Image::PIXEL_FORMAT_Y8:
  36.         cvDataType = CV_8U;
  37.         cvDataWidth = 1;
  38.         break;
  39.  
  40.  
  41.     case Intel::RealSense::Image::PIXEL_FORMAT_DEPTH:
  42.     case Intel::RealSense::Image::PIXEL_FORMAT_DEPTH_RAW:
  43.         cvDataType = CV_16U;
  44.         cvDataWidth = 2;
  45.         break;
  46.     case Intel::RealSense::Image::PIXEL_FORMAT_DEPTH_F32:
  47.         cvDataType = CV_32F;
  48.         cvDataWidth = 4;
  49.         break;
  50.  
  51.  
  52.     case Intel::RealSense::Image::PIXEL_FORMAT_Y16:
  53.         cvDataType = CV_16U;
  54.         cvDataWidth = 2;
  55.         break;
  56.     case Intel::RealSense::Image::PIXEL_FORMAT_Y8_IR_RELATIVE:
  57.         cvDataType = CV_8U;
  58.         cvDataWidth = 1;
  59.         break;
  60.     }
  61.  
  62.     // suppose that no other planes
  63.     if (data.planes[1] != NULL) throw(0); // not implemented
  64.                                           // suppose that no sub pixel padding needed
  65.     if (data.pitches[0] % cvDataWidth != 0) throw(0); // not implemented
  66.  
  67.     outImg->create(imgInfo.height, data.pitches[0] / cvDataWidth, cvDataType);
  68.    
  69.     //memcpy(outImg->data, data.planes[0], imgInfo.height*imgInfo.width*cvDataWidth * sizeof(pxcBYTE));
  70.     memcpy(outImg->data, data.planes[0], imgInfo.height*imgInfo.width*cvDataWidth * sizeof(uint8_t));
  71.  
  72.     inImg->ReleaseAccess(&data);
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement