我正在使用OpenNI 1.5.4.0和OpenCV 2.4.5,加上用於可視化目的(僅RGB圖像)的Qt。 基本上,我是從一個超高動力學檢索深度和RGB幀,並將它們存儲在硬盤驅動器上,利用轉換:cv :: Mat和XnDepthPixel之間的轉換*
/* Depth conversion */
cv::Mat depth = cv::Mat(2, sizes, CV_16UC1, (void*) pDepthMap); //XnDepthPixel *pDepthMap
/* RGB conversion */
///image is a QImage* , pImageMap is a XnUInt8*
for(int i = 0; i < height; ++i)
{
for (unsigned y = 0; y < height; ++y)
{
uchar *imagePtr = (*image).scanLine(y);
for (unsigned x=0; x < width; ++x)
{
imagePtr[0] = pImageMap[2];
imagePtr[1] = pImageMap[1];
imagePtr[2] = pImageMap[0];
imagePtr[3] = 0xff;
imagePtr+=4;
pImageMap+=3;
}
}
}
現在,我想加載從硬盤驅動器的那些圖像,以計算3D點雲作爲後處理計算。 我加載深度圖如下:
depth_image = cv::imread(m_rgb_files.at(w).toStdString(), CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
但應用公式:
depth = depth_image.at<int>(j,i); //depth_image is stored as 16bit
p.z = (float)depth * 0.001f; //converting from millimeters to meters
p.x = (float)(i - m_params.center_x) * depth * m_params.focal_length; //focal_length read using OpenNI function
p.y = (float)(j - m_params.center_y) * depth * m_params.focal_length;
得到的點雲是一個爛攤子。
如果我通過直接使用原生XnDepthPixel *數據進行「在線」處理,結果是完美的,使用前面寫的公式。 有人可以給我一個關於我的錯的「暗示」嗎?
在此先感謝
編輯:我也跟隨這resource,但它不爲我工作,因爲XnDepthPixel包含以毫米爲現實世界的數據
確定sorry..i我還是新來的平臺 – madduci 2013-05-13 14:52:09