相关疑难解决方法(0)

OpenCV stereoRectify扭曲图像

我们有一个ELP 1.0百万像素双镜头Usb立体相机,我们正在尝试使用C++中的OpenCV 3.1进行校准.但是,校准的结果完全无法使用,因为调用stereoRectify会使图像完全变为两次.这就是我们的工作:

在两个相机中找到校准(棋盘)图案,棋盘尺寸为5x7,无论拍摄的图像数量多少,结果几乎相同

findChessboardCorners(img[k], boardSize, corners, CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_NORMALIZE_IMAGE)
cornerSubPix(img[k], corners, Size(11, 11), Size(-1, -1), TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01));
Run Code Online (Sandbox Code Playgroud)

正确检测所有使用的棋盘

drawChessboardCorners(img[k], boardSize, corners, bFound);
Run Code Online (Sandbox Code Playgroud)

然后我们分别校准每个摄像机(但这一步似乎对立体声校准不重要),但我们可以用它来分别验证每个摄像机

calibrateCamera(objectPoints, imagePoints[k], Size(320, 240), cameraMatrix[k], distCoeffs[k], rvecs, tvecs, 0)
Run Code Online (Sandbox Code Playgroud)

然后我们做立体声校准

stereoCalibrate(objectPoints, imagePoints[0], imagePoints[1], cameraMatrix[0], distCoeffs[0], cameraMatrix[1], distCoeffs[1],
    Size(320, 240), R, T, E, F, CALIB_USE_INTRINSIC_GUESS);
Run Code Online (Sandbox Code Playgroud)

计算整流变换

stereoRectify(cameraMatrix[0], distCoeffs[0], cameraMatrix[1], distCoeffs[1], Size(320, 240), R, T, R1, R2, P1, P2, Q,
    CALIB_ZERO_DISPARITY, 1, Size(320, 240), &validRoI[0], &validRoI[1]);
Run Code Online (Sandbox Code Playgroud)

初始化重映射的映射

Mat rmap[2][2];
initUndistortRectifyMap(cameraMatrix[0], distCoeffs[0], R1, P1, Size(FRAME_WIDTH, FRAME_HEIGHT), CV_16SC2, rmap[0][0], …
Run Code Online (Sandbox Code Playgroud)

c++ opencv camera-calibration

3
推荐指数
2
解决办法
6975
查看次数

标签 统计

c++ ×1

camera-calibration ×1

opencv ×1