检查代码一千次后,我看不出我做错了什么。该算法非常简单:我有一个 CV_16U 图像,其视差值称为 disp,我正在尝试构建 u 和 v 视差以检测障碍物。
Mat v_disparity, u_disparity;
v_disparity=Mat::zeros(disp.rows,numberOfDisparities*16, CV_16U);
u_disparity=Mat::zeros(numberOfDisparities*16,disp.cols, CV_16U);
for(int i = 0; i < disp.rows; i++)
{
d = disp.ptr<ushort>(i); //d[j] is the disparity value
for (int j = 0; j < disp.cols; ++j)
{
v_disparity.at<uchar>(i,(d[j]))++;
u_disparity.at<uchar>((d[j]),j)++;
}
}
问题是当我在转换为 8bit Unsigned 后使用 imshow 打印两个差异时。u-disparity 是错误的,因为它具有应有的形状,但它是水平尺寸的一半,即正确的黑色像素。