32 #include <sensor_msgs/Image.h>
34 #include <stereo_msgs/DisparityImage.h>
62 void callback(
const stereo_msgs::DisparityImageConstPtr& disparityMsg)
73 if(publish32f || publish16u)
76 cv::Mat disparity(disparityMsg->image.height, disparityMsg->image.width, CV_32FC1,
const_cast<uchar*
>(disparityMsg->image.data.data()));
82 depth32f = cv::Mat::zeros(disparity.rows, disparity.cols, CV_32F);
86 depth16u = cv::Mat::zeros(disparity.rows, disparity.cols, CV_16U);
88 for (
int i = 0;
i < disparity.rows;
i++)
90 for (
int j = 0;
j < disparity.cols;
j++)
92 float disparity_value = disparity.at<
float>(
i,
j);
93 if (disparity_value > disparityMsg->min_disparity && disparity_value < disparityMsg->max_disparity)
96 float depth = disparityMsg->T * disparityMsg->f / disparity_value;
99 depth32f.at<
float>(
i,
j) = depth;
103 depth16u.at<
unsigned short>(
i,
j) = (
unsigned short)(depth*1000.0f);