opencv 3.4所带的SGBM算法,求出的视差值需要除16以保证数据的正确性。
// 读取图像
cv::Mat left = cv::imread("/left.png", 0);
cv::Mat right = cv::imread("/right.png", 0);
cv::Ptr<cv::StereoSGBM> sgbm = cv::StereoSGBM::create(
0, 96, 9, 8 * 9 * 9, 32 * 9 * 9, 1, 63, 10, 100, 32); // 神奇的参数
cv::Mat disparity_sgbm, disparity;
sgbm->compute(left, right, disparity_sgbm);
disparity_sgbm.convertTo(disparity, CV_32F, 1.0 / 16.0f);//
cv::imwrite("/home/lzy/disparty.png",disparity);
// for(int i=0;i<disparity.cols;i+=1)
// cout<<"disparity:"<<disparity.at<uchar>(1,2);
cv::imshow("disparity", disparity/100);