当前位置: 首页 > news >正文

OpenCV的 ccalib 模块用于自定义标定板的检测和处理类cv::ccalib::CustomPattern()----函数calibrate

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::ccalib::CustomPattern 是OpenCV的 ccalib 模块中的一个类,主要用于自定义标定板的检测和处理。这个模块提供了比传统的 calib3d 模块更高级的相机标定功能。

函数calibrate是 cv::ccalib::CustomPattern 类中的一个静态方法,用于基于自定义标定图案进行相机标定。它的作用与 OpenCV 中经典的 cv::calibrateCamera() 非常相似,但针对的是使用自定义标定板的情况。

该函数的作用是根据多个视角下检测到的 世界坐标系点(objectPoints) 和 图像坐标系点(imagePoints) 来计算相机的内参矩阵和畸变系数,并可选地返回每帧图像对应的旋转向量和位移向量。

它是一个封装了标定流程的方法,适用于那些通过 CustomPattern 检测得到角点或特征点的场景。

函数原型

double cv::ccalib::CustomPattern::calibrate
(InputArrayOfArrays objectPoints,InputArrayOfArrays imagePoints,Size imageSize,InputOutputArray cameraMatrix,InputOutputArray distCoeffs,OutputArrayOfArrays rvecs,OutputArrayOfArrays tvecs,int flags = 0,TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON)
)

参数

参数名类型描述
objectPointsInputArrayOfArrays各视图中 3D 空间点集合,通常为 std::vector<std::vectorcv::Point3f> 类型。每个子 vector 表示一张图的世界坐标点。
imagePointsInputArrayOfArrays各视图中对应的 2D 图像点集合,通常为 std::vector<std::vectorcv::Point2f> 类型。每个子 vector 是检测到的图像上的角点。
imageSizeSize图像尺寸,如 Size(640, 480),用于初始化内参矩阵等。
cameraMatrixInputOutputArray输出/输入的相机内参矩阵(3x3),可以传入已知值作为初始估计。
distCoeffsInputOutputArray输出/输入的畸变系数(1x5 或 1x8),格式为 (k1, k2, p1, p2, [k3, [k4, k5, k6]])。
rvecsOutputArrayOfArrays输出每个视图的旋转向量(可为 std::vectorcv::Mat 或 std::vectorcv::Vec3d>)。
tvecsOutputArrayOfArrays输出每个视图的平移向量(同上)。
flagsint标志位,控制标定行为。常用选项如下:
- CALIB_USE_INTRINSIC_GUESS: 使用提供的内参初始值
- CALIB_FIX_PRINCIPAL_POINT: 固定主点不优化
- CALIB_ZERO_TANGENT_DIST: 不优化切向畸变
- CALIB_FIX_K1~K6: 固定某些径向畸变系数
criteriaTermCriteria迭代优化终止条件,默认为最多迭代30次或精度达到浮点误差级别。

代码示例

#include <opencv2/ccalib.hpp>
#include <opencv2/opencv.hpp>int main()
{// 假设我们已经用 CustomPattern 检测到了多组 objectPoints 和 imagePointsstd::vector< std::vector< cv::Point3f > > objectPoints;std::vector< std::vector< cv::Point2f > > imagePoints;// 示例数据(实际应由 detectPattern 得到)for ( int i = 0; i < 10; ++i ){std::vector< cv::Point3f > obj;std::vector< cv::Point2f > img;// 填充一些世界坐标和图像坐标for ( int x = 0; x < 5; ++x )for ( int y = 0; y < 5; ++y )obj.push_back( cv::Point3f( x * 10, y * 10, 0 ) );// 假设图像点是随机生成的for ( int j = 0; j < 25; ++j )img.push_back( cv::Point2f( rand() % 640, rand() % 480 ) );objectPoints.push_back( obj );imagePoints.push_back( img );}cv::Mat cameraMatrix = cv::Mat::eye( 3, 3, CV_64F );    // 初始化内参cv::Mat distCoeffs   = cv::Mat::zeros( 8, 1, CV_64F );  // 畸变系数std::vector< cv::Mat > rvecs, tvecs;cv::ccalib::CustomPattern pattern;double error =pattern.calibrate( objectPoints, imagePoints, cv::Size( 640, 480 ), cameraMatrix, distCoeffs, rvecs, tvecs, 0, cv::TermCriteria( cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 30, 1e-6 ) );std::cout << "Reprojection Error: " << error << std::endl;std::cout << "Camera Matrix:\n" << cameraMatrix << std::endl;std::cout << "Distortion Coefficients:\n" << distCoeffs << std::endl;return 0;
}

运行结果

Reprojection Error: 243.176
Camera Matrix:
[145.5314351146498, 0, 319.4999999809153;0, 111.8716131818644, 239.5000000023377;0, 0, 1]
Distortion Coefficients:
[-0.02024007664987641;5.558029159131296e-05;0.0006431802159707427;-0.0009573062145439125;-3.54839696095315e-08]
http://www.xdnf.cn/news/350713.html

相关文章:

  • uniapp开发的项目上传到国内主流应用市场(华为、小米、oppo、vivo)
  • COLT_CMDB_aix_diskinfo.sh
  • OCCT中的基础变换
  • C++卡特兰数讲解
  • Java 显式锁与 Condition 的使用详解
  • Android MVC架构的现代化改造:构建清晰单向数据流
  • AI搜索的未来:技术纵深发展与关键突破路径
  • Kubernetes 手动部署 Prometheus 学习计划
  • 【计算机网路】--tcp四次挥手关闭连接
  • pm2 list查询服务时如何通过name或者namespace进行区分
  • 文本文件的定义
  • CTF杂项入门(BUUCTF-Misc第一页)
  • Python机器学习中的字典列表特征提取
  • 基于vue3+QuillEditor的深度定制
  • [数据库之十四] 数据库索引之位图索引
  • 最短路径-Dijkstra及其堆优化版本
  • 指纹浏览器技术解析:从原理到实战的多账号管理解决方案
  • 数据清洗(ETL/ELT)原理与工具选择指南:企业数字化转型的核心引擎
  • 常用 svg ICON
  • FreeRTOS如何检测内存泄漏
  • Linux操作系统中的通知机制 - 监控文件事件 inotify
  • 印度股票市场API对接文档
  • 麒麟信安举办特种行业核心代理商中级技术认证培训班
  • 【计网】TCP/IP四层模型(一)
  • [硬件电路-18]:MCU - LPC1765FBD100是恩智浦(NXP)半导体推出的一款基于ARM Cortex-M3内核的高性能32位微控制器
  • 如果说开启的TIM3定时器有ccr1,ccr2,ccr3,我想要关闭ccr2的PWM输出,怎么通过代码实现
  • AI优化高频PCB信号完整性:猎板PCB的技术突破与应用实践
  • 多环串级PID
  • 主场景 工具栏 植物卡牌的渲染
  • 从“看不见”到“一目了然”:网络流量分析与监控大屏