2017-07-14 146 views
0

我有一個realsense相機,我試圖讀取16位深度圖像。 我有一個問題 - 當我創建16位值的直接opencv墊我只看到黑色的圖像。當我將16位圖像轉換爲8位255/1000的縮放圖像時,我會得到正常的圖像,但我不想丟失這些信息。opencv realsense 16位深度圖像

depthImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_DEPTH, &depthImgData); 

pxcBYTE* cpixels = depthImgData.planes[0]; 

Mat r_depth(frameSize, CV_16UC1, cpixels); 

這是我的代碼,我轉換圖像。

你能告訴我這種行爲的原因是什麼,以及如何獲得16位圖像?

+0

「當我將16位圖像轉換爲8位255/1000比例」 - 這是一種非常奇怪的比例因子。什麼是你的16位圖像的像素強度的實際範圍?如果僅僅用4分割就會給出一個「正常圖像」,那麼它看起來更像10位值,存儲爲16位整數。 –

+0

我從博客文章中獲得了這個。數值範圍從4到7k(在我的火車中)。 這裏有相同的比例因子 - https://software.intel.com/zh-cn/articles/using-librealsense-and-opencv-to-stream-rgb-and-depth-data。 我不認爲這個值只有10位。另外,當我將16位轉換爲更小的縮放比例(大約1/4時,我並不確切),我會得到更清晰的圖像。 –

回答

0

您使用哪種RealSense設備? R200,LR200,SR300還是D410?

建議使用在GitHub上維護的librealsense庫/ API。 將深度格式配置爲RS2_FORMAT_Z16。而且,我使用下面的代碼來獲取16位深度數據。

auto frame = queue.wait_for_frame(); 

Mat depth16(Size(640, 480), CV_16U, (void*)frame.get_data(), Mat::AUTO_STEP); 
+0

sr300,但已經不需要了。 –

+0

雖然非常感謝回答 –