我试图访问深度图的像素值,使用kinect,openni和opencv。即时通讯使用此代码
Mat depth;
VideoCapture capture1(CV_CAP_OPENNI);
capture1.grab();
capture1.retrieve(depth,CV_CAP_OPENNI_DEPTH_MAP);
imshow("depth",depth);
waitKey(0);
cout << depth.at<unsigned>(20,20);
system("PAUSE");
程序向我显示深度图但是当我试图接受该值时,产生错误。但如果你把:
cout << depth;
然后告诉我所有的价值观。
答案 0 :(得分:0)
由于你没有指定错误,我会试一试:问题似乎是你试图访问来自另一个Mat
的元素:你的那个create名为depth
,但cout
调用中引用的名称为depthshow
。
答案 1 :(得分:0)
根据CAP_OPENNI_DEPTH_MAP
的{{3}},您的Mat
每个像素应该有16位无符号整数数据,而不是您的32位unsigned int
试图使用。因此,请改用以下内容:
// uint16_t available in C++11
cout << depth.at<uint16_t>(20,20) << " millimetres";
或
// not 100% sure that all compilers produce 16 bits fields
cout << depth.at<unsigned short int>(20,20) << " millimetres";