v 視差と u 視差を計算する関数を OpenCV で作成しているので、最初に視差画像が必要です。sgbm.minDisparity = 0 と numberOfDisparities = 160 を設定しました。
視差画像は CV_16SC1 で、関数のプログラミングを続けるには符号なしの値が必要です。
Mat全体を印刷したところ、負の値と160を超える値があります。ドキュメントをよく理解していれば、視差画像は視差値を表しています*16。私の場合、最大値は 16*160 ということですか? そうでない場合、何が間違っている可能性がありますか?. とにかく、minDisparity が 0 に設定されているのに 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
}