void onNewDepthSample(DepthNode node, DepthNode::NewSampleReceivedData data) { int32_t w, h; FrameFormat_toResolution(data.captureConfiguration.frameFormat,&w,&h); if ( data.depthMap != nullptr ) { Mat depth( h, w, CV_16SC1, (void*)(const int16_t*)data.depthMap ); Mat hsv( h, w, CV_8UC3); Mat psCol( h, w, CV_8UC3); namedWindow("color depth", 0); short level; for(int y=0; y<h; y++) { for(int x=0; x<w; x++) { level = depth.at<short>(y, x); if(level > 32000) { //invalid hsv.data[y * hsv.step + x*3 + 0] = 0; hsv.data[y * hsv.step + x*3 + 1] = 0; hsv.data[y * hsv.step + x*3 + 2] = 0; } else { uchar p = level%100; hsv.data[y * depth8u.step + x*3 + 0] = (uchar)(p*2.56); hsv.data[y * depth8u.step + x*3 + 1] = 255; hsv.data[y * depth8u.step + x*3 + 2] = 255; } } } cvtColor(hsv, psCol, CV_HSV2BGR_FULL); imshow("color depth", psCol); int c = waitKey( 10 ); if(c==27 || c=='q') g_context.quit(); if(c=='c') imwrite("DS325.png", psCol); } g_dFrames++; }
2012年11月16日金曜日
DepthSense SDKで距離画像を取得,OpenCVで表示
SoftkineticのDepthSense SDKで,DS325からの距離画像をOpenCVのMat(CV_16SC1)に放り込み,
100mmで色相が一周するように擬似カラー化して表示する.
登録:
投稿 (Atom)