【发布时间】:2019-03-12 15:12:58
【问题描述】:
我正在运行此处找到的教程:https://software.intel.com/en-us/articles/using-librealsense-and-opencv-to-stream-rgb-and-depth-data
它使用以下行从 r200 获取深度值:
cv::Mat depth16( _depth_intrin.height, _depth_intrin.width, CV_16U,(uchar *)_rs_camera.get_frame_data( rs::stream::depth ) );
cv::Mat depth8u = depth16;
depth8u.convertTo( depth8u, CV_8UC1, 255.0/1000 );
imshow( WINDOW_DEPTH, depth8u );
输出图像蒸汽是:
您也可以看到彩色图像。我还在底部放了一个卷尺,最远可达 3.5m(r200 的范围应该是 3.5m)
为什么颜色是二进制的?我尝试添加不同颜色的图像,但它似乎根本不是深度值。此外,即使距离 1m 到 5m,地板始终是黑色也是没有意义的。为什么所有物体都是白色的?桌子和沙发的距离明显不同。
我该如何改进呢?我知道您可以从 r200 获得良好的深度值,就像我在示例中获得的一样。请参阅 (http://docs.ros.org/kinetic/api/librealsense/html/cpp-capture_8cpp_source.html),但这些使用 glfw 而不是 OpenCV。我想知道为什么深度值在转换后如此奇怪。
理想情况下,我想生成深度值并过滤 1m 到 2m 范围之外的任何值。谢谢!
【问题讨论】:
-
一种基本的调试技术是单独检查每个步骤。 16位输入的深度范围是多少?如果您使用
0-3500范围内的输入将相机图像替换为手工输入,会发生什么?
标签: c++ computer-vision realsense