Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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
C++ 为什么GBM会给出负数和高于负数的数字_C++_Opencv_Stereo 3d_Disparity Mapping - Fatal编程技术网

C++ 为什么GBM会给出负数和高于负数的数字

C++ 为什么GBM会给出负数和高于负数的数字,c++,opencv,stereo-3d,disparity-mapping,C++,Opencv,Stereo 3d,Disparity Mapping,我正在OpenCV中编写一个函数来计算v和u视差,所以我首先需要视差图像。我将sgbm.minDisparity设置为0,numberOfDifferences设置为160 视差图像是CV_16SC1,我需要无符号值来继续编程我的函数 我打印了整个垫子,有负值和160以上的值。如果我很好地理解了文档,那么视差图像表示视差值*16。这是否意味着在我的情况下,最大值是16*160?。如果没有,会有什么问题?。不管怎样,当minDisparity设置为0时,为什么值小于零?代码如下: void Ste

我正在OpenCV中编写一个函数来计算v和u视差,所以我首先需要视差图像。我将sgbm.minDisparity设置为0,numberOfDifferences设置为160

视差图像是CV_16SC1,我需要无符号值来继续编程我的函数

我打印了整个垫子,有负值和160以上的值。如果我很好地理解了文档,那么视差图像表示视差值*16。这是否意味着在我的情况下,最大值是16*160?。如果没有,会有什么问题?。不管怎样,当minDisparity设置为0时,为什么值小于零?代码如下:

void Stereo_SGBM(){
    int numberOfDisparities;
    StereoSGBM sgbm;
    Mat img1, img2;

    img1=left_frame;   //left and right frames are global variables
    img2=right_frame;

    Size img_size = img1.size();

    //I make sure the number of disparities is divisible by 16
    numberOfDisparities = 160;  

    int cn=1;   //Grayscale

    sgbm.preFilterCap = 63;
    sgbm.SADWindowSize = 3;
    sgbm.P1 = 8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
    sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
    sgbm.minDisparity = 0;
    sgbm.numberOfDisparities = numberOfDisparities;
    sgbm.uniquenessRatio = 10;
    sgbm.speckleWindowSize = 100;
    sgbm.speckleRange = 2;
    sgbm.disp12MaxDiff = 1;
    sgbm.fullDP = false;  

    Mat disp;   // CV_16SC1
    Mat disp8;  //CV_8UC1 (used later in the code


    sgbm(img1, img2, disp); 
    //disp contains negative values and larger than 160!!!

    //img1 and img2 are left and right channels of size 1242x375 grayscale    
}

在我看来,差距是一个浮点数,它反映在参数上。如果将结果转换为float,然后除以16,事情会变得更有意义:

该算法显然报告了-1(实际上是minDisparity-1),其中它无法匹配。NumberOfDistance更多的是“最大差异-最小差异”,而不是实际的值数量

例如,如果你给minDisparity=2和NumberOfDifferentications=144,你将得到范围为1.0-145.0的结果。不同值的数量实际上是144*16,因为它以1/16的增量进行

是的,在你的例子中,使用整数,这意味着你将得到16*160的最大值