网站推广和优化教程,上海网络科技有限公司招聘,做放单网站,宁夏建设工程质量监督站网站1.环境依赖
本算法采用张正友相机标定法进行实现#xff0c;内部对其进行了封装。
环境依赖为 ubuntu20.04 opencv4.2.0 yaml-cpp
yaml-cpp安装方式#xff1a;
#xff08;1#xff09;git clone https://github.com/jbeder/yaml-cpp.git #将yaml-cpp下载至本地
内部对其进行了封装。
环境依赖为 ubuntu20.04 opencv4.2.0 yaml-cpp
yaml-cpp安装方式
1git clone https://github.com/jbeder/yaml-cpp.git #将yaml-cpp下载至本地
2进入下载目录中mkdir build cd build #构建build文档
3cmake .. #使用cmake构建
4sudo make install #安装yaml-cpp
仓库下载
git clone https://gitee.com/BingbingSuperEffort/calibration.git
2.使用方式
使用cmake构建执行文件
mkdir build cd build cmake.. make
编译的可执行文件为Calibration使用时运行该文件并配备图片文件夹路径作为参数该文件夹内部为相机拍摄的不同角度与不同高度的棋盘照片。
使用示例./Calibration ./test-jpg
3.配置文件
配置文件为config.yaml 内部包含如下配置
1chess_rowchess_col 棋盘格行列个数该参数表示相机标定使用的黑白棋盘格的行和列上的方格个数请确保行列正确
2square_size 棋盘方格大小该参数表示每个黑白方格的长度数值
3image_path 读取文件路径记录名该参数为读取的含有棋盘的具体图片的路径名称记录可以查阅本次标定具体使用了哪些图片参数以弃用不在输出路径记录文档。
4image_suffix 图片名称后缀该参数表面在文件夹中查找哪种类型的图片参数支持jpg与png格式参数以弃用。内部将直接搜索文件夹中.jpg.png格式的所有图片
5camera_matrix_file 输出文件名该参数指定了yaml格式的输出文件文件内部包含测定后的内参数的具体数值
6output_detail 是否输出更详细的数据参数默认为false不输出更详细的参数设置为true将输出每张图片的像素误差以及整体误差等详细的参数会将结果保存到camera_result_detail.txt 文件中
7camera_type标定相机的具体类型CV为普通相机FISHEYE为鱼眼相机
8downsample是否降采样采取角点处理像素高的照片速度快像素低可能会检测不到角点导致评定失败默认为true
9show_draw是否显示角点绘制过程默认为false在处理大文件时应当关闭避免卡死
10undistort是否对图像实现畸变矫正并显示矫正后的效果默认为false
11test_image_path实现畸变矫正的测试图片路径仅在undistort为true时有效
4.输出文件
image_path.txt 测定的具体图片的名称路径
camera_matrix.yaml 相机内参数fxfycxcy畸变系数k1,k2,p1,p2,p3或者k1,k2,u1,u2图片长宽。
camera_result_detail.txt 相机测定具体的数值包含每幅图片的标定误差总体平均误差每幅图像的畸变系数。只有在配置文件中设置才会输出该文件。
5.标定流程 6.文件介绍
各个文件简要说明
main.cpp主要为接口函数以及一些接口参数的设置。编译成为可执行文件后在使用时传入测定图片的文件夹路径
CCalibration类实现摄像机标定功能calibration.run()执行读取标定板图片、角点检测、亚像素精确化、摄像机标定、计算重投影误差、保存标定参数功能
CUndistort类实现畸变校正功能undistort.run()执行读取内部参数、读取畸变图像、畸变校正、显示校正结果功能。执行时默认不进行畸变校正如需打开请在config.yaml中将undistort参数设置为true。
calibration.h, calibration.cpp实现摄像机标定包含CV模型和Fisheye模型。默认为CV模型如需更换为Fisheye模型请在config.yaml中将camera_type参数设置为FISHEYE。
undistort.h, undistort.cpp实现畸变校正包含CV模型和Fisheye模型。如需更换为Fisheye模型请在config.yaml中将camera_type参数设置为FISHEYE。
7.使用函数
1.findChessboardCorners()角点提取函数。
函数功能
该函数的功能就是判断图像内是否包含完整的棋盘图如果能够检测完全就把他们的角点坐标按 顺序逐行从左到右记录下来并返回非0数否则返回0。 这里对size参数要求非常严格函数必须检测到相同的size才会返回非0否则返回0。
函数原型
bool cv::findChessboardCorners ( InputArray image,
Size patternSize,
OutputArray corners,
int flags CALIB_CB_ADAPTIVE_THRESHCALIB_CB_NORMALIZE_IMAGE
);
参数介绍
image输入的棋盘格原图。必须是8位灰度图或者彩色图像
patternSize棋盘格图片的每一行每一列的内角点数
corners输出检测到的角点阵列
flags标志位默认为0 2.find4QuadCornerSubpix()亚像素角点提取函数
函数功能
该函数的目的是提高角点检测的精度特别是当使用亚像素精度进行定位时。在图像中四角形的角点可能因为各种因素如图像噪声、模糊等而不完全清晰。find4QuadCornerSubpix() 函数通过在角点附近进行更细致的搜索来提高角点的定位精度。
函数原型
bool cv::find4QuadCornerSubpix(InputArray image,
InputOutputArray corners,
Size region_size);
参数介绍
img输入图片矩阵
corners初始的角点坐标
region_size角点搜索窗口大小
3.drawChessboardCorners()角点绘制函数
函数功能
该函数的主要作用是帮助用户直观地展示检测到的棋盘格角点位置以便于调试和验证。
函数原型
void cv::drawChessboardCorners(InputOutputArray image,
Size patternSize,
const Mat corners,
bool patternWasFound);
参数介绍
imagecv::Mat 类型这是要在其上绘制角点的输出图像。函数执行后图像上会显示棋盘格的角点。
patternSizecv::Size 类型这是一个 cv::Size 结构表示棋盘格的内部角点数。
corners const std::vectorcv::Point2f 类型这是一个包含棋盘格角点坐标的向量。这些坐标通过角点检测算法如 findChessboardCorners()获得。
patternWasFoundbool 类型一个布尔值指示棋盘格模式是否被成功检测。如果 true角点将被绘制如果 false角点将不会被绘制。
4.calibrateCamera()相机标定函数
函数功能
该函数用于相机标定即确定相机的内参和可选外参。相机内参包括焦距、主点坐标和畸变系数而外参则包括相机相对于某一特定坐标系的位置和旋转
函数原型
double cv::calibrateCamera ( InputArrayOfArrays objectPoints,
InputArrayOfArrays imagePoints,
Size imageSize,
InputOutputArray cameraMatrix,
InputOutputArray distCoeffs,
OutputArrayOfArrays rvecs,
OutputArrayOfArrays tvecs,
int flags 0,
TermCriteria criteria TermCriteria(TermCriteria::COUNTTermCriteria::EPS, 30, DBL_EPSILON)
);
参数介绍
objectPoints一系列角点的三维坐标。
imagesPoints角点投影到标定图案平面上的二维坐标点。
imageSize图片的尺寸大小用以初始化相机内参。
cameraMatrix相机的内参矩阵。
distCoeffs相机的畸变参数矩阵有5个畸变参数k1,k2,p1,p2,k3
rvecs旋转向量
tvecs平移向量
flags表示标定时采用的算法默认为0criteria迭代的终止条件通常忽略
5.projectPoints()重投影函数
函数功能
根据相机的内参焦距和主点坐标和畸变系数将三维点转换为图像上的二维点。对计算结果进行评定。
函数原型
void cv::projectPoints ( InputArray objectPoints,
OutputArray imagePoints,
InputArray rvec,
InputArray tvec,
InputArray K,
InputArray D,
double alpha 0,
OutputArray jacobian noArray()
);
参数介绍
objectPoints对象点的数组
imagesPoints若干张图片对应的若干的内角点的坐标
rvecs旋转向量
tvecs平移向量
K内参矩阵
D畸变矩阵
alpha偏斜系数
jacobian是否计算雅可比矩阵