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

OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用

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

算法描述

cv::calibrateCameraRO 是 OpenCV 中用于相机标定的函数,它允许固定某些点来进行更精确的标定。

函数原型

double cv::calibrateCameraRO	
(InputArrayOfArrays 	objectPoints,InputArrayOfArrays 	imagePoints,Size 	imageSize,int 	iFixedPoint,InputOutputArray 	cameraMatrix,InputOutputArray 	distCoeffs,OutputArrayOfArrays 	rvecs,OutputArrayOfArrays 	tvecs,OutputArray 	newObjPoints,OutputArray 	stdDeviationsIntrinsics,OutputArray 	stdDeviationsExtrinsics,OutputArray 	stdDeviationsObjPoints,OutputArray 	perViewErrors,int 	flags = 0,TermCriteria 	criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) 
)		

参数

  • 参数objectPoints: 标志点在世界坐标系中的位置。
  • 参数imagePoints: 标志点在图像平面上的位置。
  • 参数imageSize: 图像的大小。
  • 参数iFixedPoint: 固定点的数量。
  • 参数cameraMatrix: 相机内参矩阵。
  • 参数distCoeffs: 径向畸变和切向畸变系数。
  • 参数rvecs: 每个视角的旋转向量。
  • 参数tvecs: 每个视角的平移向量。
  • 参数newObjPoints: 优化后的标志点在世界坐标系中的位置。
  • 参数stdDeviationsIntrinsics: 内参的标准偏差。
  • 参数stdDeviationsExtrinsics: 外参的标准偏差。
  • 参数stdDeviationsObjPoints: 标志点位置的标准偏差。
  • 参数perViewErrors: 每个视角的重投影误差。
  • 参数flags: 标定选项。
  • 参数criteria: 终止条件。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{// 已知的世界坐标系中标记点的位置vector< vector< Point3f > > objectPoints;  // 存储所有棋盘格角点的真实坐标Size boardSize( 7, 5 );                    // 棋盘格的尺寸float squareSize = 1.0f;                   // 实际单位下的边长for ( int i = 0; i < boardSize.height; i++ ){for ( int j = 0; j < boardSize.width; j++ ){objectPoints.push_back( vector< Point3f >( 1, Point3f( j * squareSize, i * squareSize, 0 ) ) );}}// 图像中找到的标记点的位置vector< vector< Point2f > > imagePoints;  // 存储每个棋盘格角点的图像坐标// 加载图像并检测棋盘格角点Mat image = imread( "path_to_your_image.jpg" );if ( image.empty() ){cout << "Could not open or find the image!" << endl;return -1;}bool found = false;vector< Point2f > corners;found = findChessboardCorners( image, boardSize, corners );if ( found ){cornerSubPix( image, corners, Size( 11, 11 ), Size( -1, -1 ), TermCriteria( TermCriteria::EPS + TermCriteria::COUNT, 30, 0.1 ) );imagePoints.push_back( corners );}else{cout << "Chessboard not found in the image." << endl;return -1;}// 相机内参和畸变系数Mat cameraMatrix = Mat::eye( 3, 3, CV_64F );Mat distCoeffs;// 输出参数vector< Mat > rvecs, tvecs;Mat newObjPoints;Mat stdDeviationsIntrinsics, stdDeviationsExtrinsics, stdDeviationsObjPoints;Mat perViewErrors;int iFixedPoint = 0;  // 固定点数量int flags       = 0;  // 默认标定选项TermCriteria criteria( TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON );// 执行相机标定double rms = calibrateCameraRO( objectPoints, imagePoints, image.size(), iFixedPoint, cameraMatrix, distCoeffs, rvecs, tvecs, newObjPoints, stdDeviationsIntrinsics, stdDeviationsExtrinsics,stdDeviationsObjPoints, perViewErrors, flags, criteria );cout << "RMS re-projection error: " << rms << endl;cout << "Camera matrix:\n" << cameraMatrix << endl;cout << "Distortion coefficients:\n" << distCoeffs << endl;return 0;
}
http://www.lryc.cn/news/500563.html

相关文章:

  • flink终止提交给yarn的任务
  • 算法刷题Day14:BM36 判断是不是平衡二叉树
  • 【Golang】Go语言编程思想(六):Channel,第一节,介绍Channel
  • 【Flux.jl】 卷积神经网络
  • 大模型在辅导场景的深度应用,猿辅导素养课推出启发性“AI作文通”
  • 深入了解架构中常见的4种缓存模式及其实现
  • Hermes engine on React Native 0.72.5,function无法toString转成字符串
  • Spring Boot + MySQL 多线程查询与联表查询性能对比分析
  • Java 设计模式~工厂模式
  • OmicsTools生信环境全自动化安装配置教程,代做生信分析和辅导
  • 鸿蒙HarmonyOS应用开发 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
  • 二分模板题
  • 一篇文章掌握Git的基本原理与使用
  • 「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
  • 朗新科技集团如何用云消息队列 RocketMQ 版“快、准、狠”破解业务难题?
  • 【Ubuntu】Ubuntu的Desktop(学习/用户使用)和Bit版本(工作)
  • cmake CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR的区别
  • 学会用VSCode debug
  • C语言专题之结构体的使用
  • python中的高阶函数
  • 学习笔记063——通过使用 aspose-words 将 Word 转 PDF 时,遇到的字体改变以及乱码问题
  • SpringBoot整合Mockito进行单元测试超全详细教程 JUnit断言 Mockito 单元测试
  • 【AI知识】过拟合、欠拟合和正则
  • MacOS编译webRTC源码小tip
  • Linux基础命令(三):文件压缩及解压缩命令
  • 目标跟踪算法:ByteTrack、卡尔曼滤波、匈牙利算法、高置信度检测目标、低置信度检测目标
  • [定昌linux系统]如何安装jdk8
  • 【Cadence32】PCB多层板电源、地平面层创建心得➕CM约束管理器Analyze分析显示设置➕“DP”报错DRC
  • 基于SpringBoot+Vue的新闻管理系统
  • 图的割点、割边(Tarjan算法)