首先,图像的深度一般是16位的,因为8位的只能表示256个不同的深度值,分辨率太低.对于16位深度数据的显示
法1:16位可以直接转成8位的显示
depth_frame = cv::Mat(depthImage.get_height_pixels(), depthImage.get_width_pixels(), CV_16U, depthImage.get_buffer());
depth_frame.convertTo(depth_out, CV_8U, 1);
这种是直接将16位转成8位,然后,后面设置的是1,也就是低于255的不变,高于的全部转位255,数据的实际信息会丢失.如果设置为很大的值,数据丢失的会更大,详见参考资料中这个函数的原理.
法2: 16位归一化后显示
由于imshow只认0~255的数值,16位的数据可以归一化到0 ~255.
depth_frame = cv::Mat(depthImage.get_height_pixels(), depthImage.get_width_pixels(), CV_16U, depthImage.get_buffer()