资源简介

根据官方例程进行改变。进行三角测量的两种方法进行三维坐标计算,非全图三维重建,是特征点,这里使用的是棋盘格角点作为匹配点

资源截图

代码片段和文件信息

// stereoCalibration.cpp : 定义控制台应用程序的入口点。
//
//在进行双目摄像头的标定之前,最好事先分别对两个摄像头进行单目视觉的标定 
//分别确定两个摄像头的内参矩阵,然后再开始进行双目摄像头的标定
//在此例程中是先对两个摄像头进行单独标定(见上一篇单目标定文章),然后在进行立体标定

//#include “stdafx.h“
#include 
#include 
#include “cv.h“
#include 
#include 

using namespace std;
using namespace cv;

const int imageWidth = 640; //摄像头的分辨率
const int imageHeight = 480;
const int boardWidth = 9; //横向的角点数目
const int boardHeight = 6; //纵向的角点数据
const int boardCorner = boardWidth * boardHeight; //总的角点数据
const int frameNumber = 13; //相机标定时需要采用的图像帧数
const int squareSize = 20; //标定板黑白格子的大小 单位mm
const Size boardSize = Size(boardWidth boardHeight); //
Size imageSize = Size(imageWidth imageHeight);

Mat R T E F; //R 旋转矢量 T平移矢量 E本征矩阵 F基础矩阵
vector rvecs;     //旋转向量
vector tvecs; //平移向量
vector> imagePointL;     //左边摄像机所有照片角点的坐标集合
vector> imagePointR; //右边摄像机所有照片角点的坐标集合
vector> objRealPoint; //各副图像的角点的实际物理坐标集合


vector cornerL; //左边摄像机某一照片角点坐标集合
vector cornerR; //右边摄像机某一照片角点坐标集合

Mat rgbImageL grayImageL;
Mat rgbImageR grayImageR;

Mat Rl Rr Pl Pr Q; //校正旋转矩阵R,投影矩阵P 重投影矩阵Q (下面有具体的含义解释)
Mat mapLx mapLy mapRx mapRy; //映射表
Rect validROIL validROIR; //图像校正之后,会对图像进行裁剪,这里的validROI就是指裁剪之后的区域

/*
事先标定好的左相机的内参矩阵
fx 0 cx
0 fy cy
0 0  1
*/
Mat cameraMatrixL;/* = (Mat_(3 3) << 532.782 0 532.904
0 342.505 233.876
0 0 1);*/
Mat distCoeffL;// = (Mat_(5 1) << -0.28095 0.0255745 0.00122226 -0.000137736 0.162946);
/*
事先标定好的右相机的内参矩阵
fx 0 cx
0 fy cy
0 0  1
*/
Mat cameraMatrixR; /*= (Mat_(3 3) << 532.782 0 532.904
0 342.505 233.876
0 0 1);*/
Mat distCoeffR;// = (Mat_(5 1) << -0.28095 0.0255745 0.00122226 -0.000137736 0.162946);


/*计算标定板上模块的实际物理坐标*/
void calRealPoint(vector>& obj int boardwidth int boardheight int imgNumber int squaresize)
{
// Mat imgpoint(boardheight boardwidth CV_32FC3Scalar(000));
vector imgpoint;
for (int rowIndex = 0; rowIndex < boardheight; rowIndex++)
{
for (int colIndex = 0; colIndex < boardwidth; colIndex++)
{
// imgpoint.at(rowIndex colIndex) = Vec3f(rowIndex * squaresize colIndex*squaresize 0);
imgpoint.push_back(Point3f(rowIndex * squaresize colIndex * squaresize 0));
}
}
for (int imgIndex = 0; imgIndex < imgNumber; imgIndex++)
{
obj.push_back(imgpoint);
}
}

void outputCameraParam(void)
{
/*保存数据*/
/*输出数据*/
FileStorage fs(“intrinsics.yml“ FileStorage::WRITE);
if (fs.isOpened())
{
fs << “cameraMatrixL“ << cameraMatrixL << “cameraDistcoeffL“ << distCoeffL << “cameraMatrixR“ << cameraMatrixR << “cameraDistcoeffR“ << distCoeffR;
fs.release();
cout << “cameraMatrixL=:“ << cameraMatrixL << endl << “

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-04-25 10:57  opencv棋盘格标定\
     目录           0  2019-04-15 10:25  opencv棋盘格标定\.vs\
     目录           0  2019-04-15 10:25  opencv棋盘格标定\.vs\Project1\
     目录           0  2019-04-15 10:25  opencv棋盘格标定\.vs\Project1\v14\
     文件       42496  2019-04-25 10:57  opencv棋盘格标定\.vs\Project1\v14\.suo
     目录           0  2019-04-25 10:57  opencv棋盘格标定\Debug\
     目录           0  2019-04-25 10:56  opencv棋盘格标定\Project1\
     文件          60  2015-07-06 21:54  opencv棋盘格标定\Project1\ClassDiagram.cd
     文件        6124  2019-04-17 21:01  opencv棋盘格标定\Project1\Project1.vcxproj
     文件        1015  2019-04-17 21:01  opencv棋盘格标定\Project1\Project1.vcxproj.filters
     目录           0  2019-04-15 13:31  opencv棋盘格标定\Project1\calib\
     文件       13126  2019-04-15 13:31  opencv棋盘格标定\Project1\calib\1.jpg
     文件     1311798  2018-03-23 16:39  opencv棋盘格标定\Project1\calib\L5.bmp
     文件     1311798  2018-03-23 16:39  opencv棋盘格标定\Project1\calib\L7.bmp
     文件     1311798  2018-03-23 16:39  opencv棋盘格标定\Project1\calib\L9.bmp
     文件     1311798  2018-03-23 16:39  opencv棋盘格标定\Project1\calib\R5.bmp
     文件     1311798  2018-03-23 16:39  opencv棋盘格标定\Project1\calib\R7.bmp
     文件     1311798  2018-03-23 16:39  opencv棋盘格标定\Project1\calib\R9.bmp
     文件        1795  2019-04-25 10:56  opencv棋盘格标定\Project1\extrinsics.yml
     文件         863  2019-04-25 10:56  opencv棋盘格标定\Project1\intrinsics.yml
     文件         742  2018-11-19 20:12  opencv棋盘格标定\Project1\opencv.props
     文件        1407  2019-04-25 10:56  opencv棋盘格标定\Project1\point3d.txt
     目录           0  2019-04-15 11:25  opencv棋盘格标定\Project1\x64\
     目录           0  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\
     文件        1020  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\Project1.Build.CppClean.log
     文件        1625  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\Project1.log
     目录           0  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\Project1.tlog\
     文件         542  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\Project1.tlog\CL.command.1.tlog
     文件       31664  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\Project1.tlog\CL.read.1.tlog
     文件         496  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\Project1.tlog\CL.write.1.tlog
     文件         177  2019-04-25 10:56  opencv棋盘格标定\Project1\x64\Debug\Project1.tlog\Project1.lastbuildstate
............此处省略15个文件信息

评论

共有 条评论