【问题标题】:u-disparity shows half the expected colsu-disparity 显示预期 cols 的一半
【发布时间】:2016-02-11 23:42:05
【问题描述】:

检查代码一千次后,我看不出我做错了什么。 该算法非常简单:我有一个 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)++;
    }
}

问题是当我使用 imshow 在转换为 8bit Unsigned 后打印两个差异时。 u-disparity 是错误的,因为它具有应有的形状,但它是水平尺寸的一半,即正确的黑色像素。

【问题讨论】:

  • 经过一些调试,我看到d[j]的值总是等于disp.at(i,j)。我猜故障出在 u_disparity.at((d[j]),j)++;但我看不到它

标签: opencv stereo-3d disparity-mapping


【解决方案1】:

我终于明白了。只是我在访问u 和v-disparities 中的像素值时使用了错误的模板。在 v-disparity 中我没有检测到它,因为我认为 disp 中没有具有高视差值的像素。 总结一下,以下几行:

    v_disparity.at<uchar>(i,(d[j]))++;
    u_disparity.at<uchar>((d[j]),j)++;

必须替换为:

    v_disparity.at<ushort>(i,(d[j]))++;
    u_disparity.at<ushort>((d[j]),j)++;

因为两个图像都是 CV_16U,并且类型 uchar 是 8 位,而不是 16 位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多