git代码下载地址:GitHub - liuanqi-libra7/stereoVision: stereoVision
原始数据
输出优化后的视差结果
核心代码
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include "opencv2/opencv.hpp"
#include "opencv2/ximgproc.hpp"
using namespace cv;
using namespace std;
using namespace ximgproc;
bool get_calib(std::string intrinsic_filename, std::string extrinsic_filename, Size img_size, vector<Mat>& matrixs) {
FileStorage fs(intrinsic_filename, FileStorage::READ);
if (!fs.isOpened())
{
printf("Failed to open file %s\n", intrinsic_filename.c_str());
return false;
}
Mat M1, D1, M2, D2;
fs["M1"] >> M1;
fs["D1"] >> D1;
fs["M2"] >> M2;
fs["D2"] >> D2;
fs.open(extrinsic_filename, FileStorage::READ);
if (!fs.isOpened())
{
printf("Failed to open file %s\n", extrinsic_filename.c_str());
return false;
}
Mat R, T, R1, P1, R2, P2;
fs["R"] >> R;
fs["T"] >> T;
Rect roi1, roi2;
Mat Q;
stereoRectify(M1, D1, M2, D2, img_size, R, T, R1, R2, P1, P2, Q, CALIB_ZERO_DISPARITY, -1, img_size, &roi1, &roi2);
Mat map11, map12, map21, map22;
initUndistortRectifyMap(M1, D1, R1, P1, img_size, CV_16SC2, map11, map12);
initUndistortRectifyMap(M2, D2, R2, P2, img_size, CV_16SC2, map21, map22);
matrixs.push_back(map11);
matrixs.push_back(map12);
matrixs.push_back(map21);
matrixs.push_back(map22);
matrixs.push_back(Q);
return true;
}
int main(int argc, char** argv){
std::string intrinsic_filename = "1280_720_intrinsics.yml";
std::string extrinsic_filename = "1280_720_extrinsics.yml";
Size img_size(1280, 720);
//读取内外参数
vector<Mat> matrixs;
if (!