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)