有沒有官方SDK這樣做,有人可以幫忙嗎? 如何在ubuntu(或其他Linux環境下)將realsense RGB幀轉換爲cv :: Mat?如何在ubuntu(或其他Linux環境下)將realsense RGB幀轉換爲cv :: Mat?
0
A
回答
1
似乎是你可以創建3 cv :: Mat來表示圖像RGB +深度+紅外的每個組件。因此,它應該像
CV ::墊frameColor = CV ::墊::零(resolutionColor.height, resolutionColor.width,CV_8UC3); cv :: Mat frameDepth = cv :: Mat :: zeros(resolutionDepth.height,resolutionDepth.width, CV_32FC1); cv :: Mat frameIR = cv :: Mat :: zeros(resolutionIR.height, resolutionIR.width,CV_8UC1);
檢查這個論壇 - > https://software.intel.com/en-us/forums/realsense/topic/538066和 Convert a PXCImage into an OpenCV Mat
0
一旦你的樣本圖像
PXCImage::ImageData c_image;
cv::Mat p_image;
PXCCapture::Sample *sample = sm->QuerySample();
if (sample->color != NULL)
{
sample->color->AcquireAccess(PXCImage::ACCESS_READ_WRITE, PXCImage::PIXEL_FORMAT_RGB32, &c_image);
PXCImage::ImageInfo inputInfo = sample->color->QueryInfo();
cv::Mat img = cv::Mat(inputInfo.height, inputInfo.width, CV_8UC4, c_image.planes[0], c_image.pitches[0]);
sample->color->ReleaseAccess(&c_image);
}
1
如果您使用的是新librealsense SDK爲Ubuntu:那麼它是一樣簡單創建一個cv :: Mat的新實例,以獲取相機的高度和寬度以及所獲取圖像的尺寸。
cv::Mat vis = cv::Mat(1080,1920,CV_8UC3);
之後,唯一的步驟左側是分配由流提供給矩陣的vis.data屬性數據
vis.data = (uchar*)reinterpret_cast<const uint8_t *>(dev->get_frame_data(rs::stream::color));`
的(UCHAR *)鑄造是投uint8_t格式轉換爲cv :: Mat的原生格式。
因爲Realsense流提供顏色BGR和OpenCV使用RGB來表示圖像,最後一步是將矩陣變換,以正確的格式:
cv::cvtColor(vis, vis, CV_BGR2RGB);
0
/***
Returns the next frame if next frame is recorded
Returns the previous frame if next frame is not recorded
***/
void Converter::ConvertPXCImageToOpenCVMat(Intel::RealSense::Image *inImg, Intel::RealSense::ImageData data, cv::Mat *outImg) {
auto cvDataType = 0;
auto cvDataWidth = 0;
auto imgInfo = inImg->QueryInfo();
switch (data.format) {
/* STREAM_TYPE_COLOR */
case Intel::RealSense::Image::PIXEL_FORMAT_YUY2: /* YUY2 image */
case Intel::RealSense::Image::PIXEL_FORMAT_NV12: /* NV12 image */
throw; // Not implemented
case Intel::RealSense::Image::PIXEL_FORMAT_RGB32: /* BGRA layout on a little-endian machine */
cvDataType = CV_8UC4;
cvDataWidth = 4;
break;
case Intel::RealSense::Image::PIXEL_FORMAT_RGB24: /* BGR layout on a little-endian machine */
cvDataType = CV_8UC3;
cvDataWidth = 3;
break;
case Intel::RealSense::Image::PIXEL_FORMAT_Y8: /* 8-Bit Gray Image, or IR 8-bit */
cvDataType = CV_8U;
cvDataWidth = 1;
break;
/* STREAM_TYPE_DEPTH */
case Intel::RealSense::Image::PIXEL_FORMAT_DEPTH: /* 16-bit unsigned integer with precision mm. */
case Intel::RealSense::Image::PIXEL_FORMAT_DEPTH_RAW: /* 16-bit unsigned integer with device specific precision (call device->QueryDepthUnit()) */
cvDataType = CV_16U;
cvDataWidth = 2;
break;
case Intel::RealSense::Image::PIXEL_FORMAT_DEPTH_F32: /* 32-bit float-point with precision mm. */
cvDataType = CV_32F;
cvDataWidth = 4;
break;
/* STREAM_TYPE_IR */
case Intel::RealSense::Image::PIXEL_FORMAT_Y16: /* 16-Bit Gray Image */
cvDataType = CV_16U;
cvDataWidth = 2;
break;
case Intel::RealSense::Image::PIXEL_FORMAT_Y8_IR_RELATIVE: /* Relative IR Image */
cvDataType = CV_8U;
cvDataWidth = 1;
break;
default:
break;
}
// suppose that no other planes
if (data.planes[1] != nullptr) throw; // not implemented
// suppose that no sub pixel padding needed
if (data.pitches[0] % cvDataWidth != 0) throw; // not implemented
outImg->create(imgInfo.height, data.pitches[0]/cvDataWidth, cvDataType);
//memcpy(outImg->data, data.planes[0], imgInfo.height*imgInfo.width*cvDataWidth * sizeof(pxcBYTE));
memcpy(outImg->data, data.planes[0], imgInfo.height*imgInfo.width*cvDataWidth * sizeof(uint8_t));
}
相關問題
- 1. 將HBITMAP轉換爲cv :: Mat
- 2. 將cv :: Mat轉換爲SDL_Texture
- 3. 如何將opencv cv :: Mat轉換爲qimage
- 4. 如何將cv :: Mat轉換爲pcl :: pointcloud
- 5. 如何將Simd :: View轉換爲cv :: Mat?
- 6. 如何將cv :: Mat轉換爲python
- 7. 如何將cv :: Mat轉換爲MFC CBitmap
- 8. 錯誤將cv :: mat轉換爲cv :: arr
- 9. 將CVImageBufferRef YUV 420轉換爲cv :: Mat RGB並將其顯示在CALayer中?
- 10. 將拜耳RGGB轉換爲CV iplimage(RGB)
- 11. 將3x1或1x3 cv :: Mat轉換爲cv :: Point3d?
- 12. 將OpenCV的cv :: Mat轉換爲Eigen
- 13. 將一行cv :: Mat轉換爲int
- 14. C++將cv :: Mat從CV_8U轉換爲CV_32F
- 15. 要將cv :: Mat轉換爲CvArr *
- 16. 將數據從cv :: Mat轉換爲mxArray
- 17. 將RGB數組轉換爲Mat(OpenCv)
- 18. 轉換爲&從OpenCV cv :: Mat,NSImage
- 19. 如何在OpenCV3.0中將CvMat *轉換爲cv :: Mat
- 20. cv :: Mat到QImage的轉換
- 21. Qimage cv :: Mat轉換奇怪的行爲
- 22. 轉換(以前RGB轉換爲)灰度MAT回到RGB
- 23. cv :: Mat轉換爲Eigen-Matrix並返回
- 24. 將T * array(Jet *或float *)轉換爲cv :: Mat <CV_32f>
- 25. 如何把cv :: Mat轉換成CvArr?
- 26. 如何將cv :: Mat中的值轉換爲* CvMat
- 27. 如何將cv :: Mat類型從CV_16UC1轉換爲CV_8UC1
- 28. 如何將從/到QImage的ROI轉換爲/從cv :: Mat?
- 29. 如何將cv :: Mat轉換爲OpenCv中的灰度級?
- 30. 如何將矢量<...>轉換爲cv :: Mat?
我如何把這個一個循環? – Pototo
你的意思是,我如何閱讀整個rssdk文件? –
我如何不斷從realsense圖像轉換爲openCV圖像,以便我可以看到實際的視頻而不是靜止圖像 – Pototo