2013-08-09 5 views
1

В настоящее время я использую Depthsense 325 из softkinetics. Я совершенно новичок в глубинной камере и openCV. Я хотел бы получить доступ к значению глубины в каждом пикселе, поэтому я немного изменил данную программу consoledemo для проверки кода. Код выглядит следующим образом.Как получить доступ к значению карты глубины с камеры глубины?

/*----------------------------------------------------------------------------*/ 

// New depth sample event handler 
void onNewDepthSample(DepthNode node, DepthNode::NewSampleReceivedData data) 
{ 


int32_t w, h; 
FrameFormat_toResolution(data.captureConfiguration.frameFormat,&w,&h); 



g_dFrames++; 



// show depth image 
if (data.depthMap != nullptr) { 
    cv::Mat mat(h, w, CV_16SC1, (void*)(const int16_t*)data.depthMap);   

    cv::imshow("SoftKinetic Depth Camera", mat); 
    cv::waitKey(1); 
} 

    // save depthmap (h =320, w=240) 

cv::Mat test_mat(h, w, CV_16SC1, (void*)(const int16_t*)data.depthMap); 
cout << "rows: " << test_mat.rows << endl; 
cout << "col: " << test_mat.cols << endl; 
printf("%d \n",test_mat.at<short>(0,0)); 


} 

Однако он продолжает показывать сообщение об ошибке: ошибка утверждения opencv не удалась. Кто-нибудь, пожалуйста, дайте мне знать, что не так с моим кодом. Моя система - окно 7, Microsoft visual studio 2010, opencv 2.4.6

ответ

-1

Я рекомендую вам попробовать эту версию. Замените эту строку в коде.

cv::Mat mat(h, w, CV_8UC1, (void*)(const float*)data.depthMap); 
+0

Этот код является неправильным. DepthMap в DepthSense имеет тип 'int16_t'. 'CV_8UC1' - 8 бит. –

Смежные вопросы