1. 相机标定与校正的核心原理
相机标定是计算机视觉中最基础也最重要的环节之一。简单来说,它就像给相机做"体检"——通过特定的标定板和算法,计算出相机的"视力参数"。这些参数包括:
- 内参矩阵(Intrinsic Matrix):描述相机自身的特性,如焦距(fx,fy)、主点(cx,cy)等
- 外参矩阵(Extrinsic Matrix):描述相机在世界坐标系中的位置和朝向
- 畸变系数(Distortion Coefficients):量化镜头的径向和切向畸变
实际项目中,我常用的是张正友标定法。它的优势在于只需要一个平面标定板(如棋盘格),就能完成所有参数的标定,非常适合工程应用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. C++实现环境搭建
2.1 开发工具选择
推荐使用以下工具链组合:
- 编译器:MSVC(Windows)或GCC(Linux)
- 构建工具:CMake 3.10+
- 核心库:OpenCV 4.5+(必须包含contrib模块)
- IDE:VS Code或Visual Studio
安装OpenCV时特别要注意:
bash复制# Ubuntu安装示例
sudo apt install libopencv-dev libopencv-contrib-dev
2.2 项目目录结构
规范的目录结构能大幅提升开发效率:
code复制camera_calibration/
├── data/ # 标定图像
├── include/ # 头文件
├── src/ # 源文件
│ ├── calibration.cpp # 标定实现
│ └── utils.cpp # 工具函数
├── CMakeLists.txt # 构建配置
└── config.yaml # 参数配置
3. 标定流程代码实现
3.1 标定板检测
首先需要检测标定板的角点:
cpp复制// 棋盘格参数
const Size boardSize(9,6); // 内角点数量
vector<Point2f> corners;
// 角点检测
bool found = findChessboardCo
