Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv u型差异显示了预期COL的一半_Opencv_Stereo 3d_Disparity Mapping - Fatal编程技术网

Opencv u型差异显示了预期COL的一半

Opencv u型差异显示了预期COL的一半,opencv,stereo-3d,disparity-mapping,Opencv,Stereo 3d,Disparity Mapping,在检查代码一千次之后,我看不出我做错了什么。 该算法非常简单:我有一个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

在检查代码一千次之后,我看不出我做错了什么。 该算法非常简单:我有一个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)++;
    }
}
matv_视差,u_视差;
v_差异=矩阵::零(显示行,差异数*16,CV_16U);
u_Distance=Mat::零(NumberOfDistancess*16,显示列,CV_16U);
对于(int i=0;i

问题是,当我使用imshow打印转换为8位无符号后的两个差异时。u型视差是错误的,因为它有它应该有的形状,但它是水平维度的一半,是正确的黑色像素。

我终于找到了答案。只是我在访问
u
v-differences
中的像素值时使用了错误的模板。在v视差中,我没有检测到它,因为我认为disp中没有具有高视差值的像素。 总而言之,以下几行:

    v_disparity.at<uchar>(i,(d[j]))++;
    u_disparity.at<uchar>((d[j]),j)++;
(i,(d[j]))+; u_.at((d[j]),j)+;
必须替换为:

    v_disparity.at<ushort>(i,(d[j]))++;
    u_disparity.at<ushort>((d[j]),j)++;
(i,(d[j]))+; u_.at((d[j]),j)+;
因为两个图像都是CV_16U,uchar的类型是8位,而不是16位。

我终于找到了答案。只是我在访问
u
v-differences
中的像素值时使用了错误的模板。在v视差中,我没有检测到它,因为我认为disp中没有具有高视差值的像素。 总而言之,以下几行:

    v_disparity.at<uchar>(i,(d[j]))++;
    u_disparity.at<uchar>((d[j]),j)++;
(i,(d[j]))+; u_.at((d[j]),j)+; 必须替换为:

    v_disparity.at<ushort>(i,(d[j]))++;
    u_disparity.at<ushort>((d[j]),j)++;
(i,(d[j]))+; u_.at((d[j]),j)+;
由于两个图像都是CV_16U,并且uchar类型是8位,而不是16位。

经过一些调试后,我发现d[j]的值始终等于disp.at(I,j)。我猜故障在u_视差线上。at((d[j]),j)+;但我看不到它经过一些调试后,我发现d[j]的值始终等于disp.at(I,j)。我猜故障在u_视差线上。at((d[j]),j)+;但我看不见