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.mzph.cn/news/904729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始学习RabbitMQ | 第一篇】从异步通信到交换机

目录 前言 1.什么是RabbitMQ&#xff1f; 2.同步调用的优缺点 3.异步调用的优缺点 3.1优点&#xff1a; 3.2异步调用的问题是什么&#xff1f; 4技术选型 4.1AMQP协议就是&#xff1a; 4.2kafka和RabbitMQ的使用场景 5.安装RabitMq 6.rabitmq的整体架构 7.RabibtM…

Dify MCP实战 - 邮件发送

安装MCP sse插件 配置MCP Server 由于Dify 目前还没有支持stdio方式连接MCP Server。我们找到了Zapier&#xff0c;轻松调用 7000 App 工具。 Zapier配置 • 访问 https://actions.zapier.com/settings/mcp/ • 添加Gmail Send Email工具 • 授权自己的Gmail邮箱 • 复制Za…

uniapp 微信小程序使用图表

使用的是秋云 ucharts 直接在hbuilder插件市场进行下载导入项目中&#xff0c;多端支持 下载地址秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 导入成功后这里就能看到导入的插件啦 导入项目后就可以直接在页面中通过组件使用了 不需要其余配置 使用简单 参…

Python数据脱敏技术在大模型机器学习中的深度应用与实践

一、数据脱敏技术体系详解 1.1 结构化数据脱敏技术 1.1.1 列级脱敏策略 import pandas as pd from faker import Fakerclass StructuredDataMasker:def __init__(self):self.faker =

【设计模式】GoF设计模式之策略模式(Strategy Pattern)

设计模式之策略模式 Strategy Pattern V1.0核心概念角色代码示例程序运行结果代码讲解 适用范围 V1.0 核心概念 策略模式是一种行为型设计模式&#xff0c;其核心思想是业务类执行某个动作时&#xff0c;可以使用该动作的不同的实现&#xff0c;并在程序运行中可以切换使用该…

VS Code配置指南:打造高效的QMK开发环境

VS Code配置指南&#xff1a;打造高效的QMK开发环境 前言 你是否曾为QMK固件开发环境的搭建而头疼不已&#xff1f;本文将手把手教你使用Visual Studio Code&#xff08;简称VS Code&#xff09;这款强大的代码编辑器来构建一个完美的QMK开发环境&#xff0c;让你的键盘固件开…

java CompletableFuture 异步编程工具用法1

1、测试异步调用&#xff1a; static void testCompletableFuture1() throws ExecutionException, InterruptedException {// 1、无返回值的异步任务。异步线程执行RunnableCompletableFuture.runAsync(() -> System.out.println("only you"));// 2、有返回值的异…

中国自动驾驶研发解决方案,第一!

4月28日&#xff0c;IDC《中国汽车云市场(2024下半年)跟踪》报告发布&#xff0c;2024下半年中国汽车云市场整体规模达到65.1亿元人民币&#xff0c;同比增长27.4%。IDC认为&#xff0c;自动驾驶技术深化与生成式AI的发展将为汽车云打开新的成长天花板&#xff0c;推动云计算在…

如何快速获取字符串的UTF-8或UTF-16编码二进制数据?数值转换成字符串itoa不是C标准?其它类型转换成字符串?其它类型转换成数值类型?

目录 如何快速获取字符串的UTF-8或UTF-16编码二进制数据? 数值转换成字符串itoa不是C标准&#xff1f; 其它类型转换成字符串 其它类型转换成数值类型 转换成数值的API 为什么有的编程语言允许字符串和整数相加? 字符串拼接 字符串字面量自动连接 如何快速获取字符串…

Android SDK 国内镜像及配置方法(2025最新,包好使!)

2025最新android sdk下载配置 1、首先你需要有android sdk manager2、 直接上教程修改hosts文件配置域名映射即可(不用FQ)2.1 获取ping dl.google.com域名ip地址2.2 配置hosts文件域名映射2.3 可以随意下载你需要的sdk3、 总结:走过弯路,踩过坑!!!大家就不要踩了!避坑1…

MySQL事务隔离机制与并发控制策略

MySQL事务隔离机制与并发控制策略 MySQL事务隔离机制与并发控制策略一、数据库并发问题全景解析二、事务隔离级别深度解析三、MySQL并发控制核心技术1. 多版本并发控制&#xff08;MVCC&#xff09;2. 锁机制 四、隔离级别实现差异对比五、生产环境最佳实践六、高级优化技巧七、…

Python `zip()` 函数是什么

Python zip() 函数是什么 在 Python 里,zip() 是一个内置函数,其主要作用是将多个可迭代对象(像列表、元组、字符串等)中的元素一一对应地组合成元组,最终返回一个迭代器,这个迭代器会生成这些元组。 基本语法 zip(*iterables)其中,*iterables 代表可变数量的可迭代对…

Jenkins 改完端口号启动不起来了

让我们将 Jenkins 恢复到默认的 8080 端口&#xff0c;确保它能正常启动&#xff1a; 1. 修改 Jenkins 的配置文件&#xff1a; sudo nano /etc/default/jenkins 将内容修改为&#xff1a; HTTP_PORT8080 JENKINS_ARGS"--webroot/var/cache/jenkins/war --httpPort8080…

【AWS+Wordpress-准备阶段】AWS注册+创建EC2实例

前言 自学笔记&#xff0c;解决问题为主&#xff0c;亲测有效&#xff0c;欢迎补充。 本地WP文件部署到AWS整体步骤如下&#xff1a;&#xff08;本文重点&#xff1a;AWS准备完成&#xff09; 0. [AWS 准备] 注册 AWS 并创建 EC2 实例 ↓ 1. [生成安装包&#xff1a;用 Du…

使用pytorch保存和加载预训练的模型方法

需要使用到的函数 在 PyTorch 中&#xff0c;torch.save() 和 torch.load() 是用于保存和加载模型的核心函数。 torch.save() 函数 主要用途&#xff1a;将模型或模型的状态字典&#xff08;state_dict&#xff09;保存到文件中。 语法&#xff1a; torch.save(obj, f, pi…

Python从入门到高手8.3节-元组的常用操作方法

目录 11.3.1 元组的常用操作方法 11.3.2 元组的查找 11.3.3 祈祷明天不再打雷下雨 11.3.1 元组的常用操作方法 元组类型是一种抽象数据类型&#xff0c;抽象数据类型定义了数据类型的操作方法&#xff0c;在本节的内容中&#xff0c;着重介绍元组类型的操作方法。 ​ 元组是…

图书推荐(协同过滤)算法的实现:基于订单购买实现相似用户的图书推荐

代码部分 package com.ruoyi.system.service.impl;import com.ruoyi.system.domain.Book; import com.ruoyi.system.domain.MyOrder; import com.ruoyi.system.mapper.BookMapper; import com.ruoyi.system.mapper.MyOrderMapper; import com.ruoyi.system.service.IBookRecom…

JMeter快速指南:命令行生成HTML测试报告(附样例命令解析)

一、核心命令解析 jmeter -g Dash_CapacityTest_01_AllModules_1000.jtl -o report/ 参数 作用 示例文件说明 -g 指定.jtl结果文件路径 -o 指定报告输出目录 自动创建report文件夹 二、操作步骤&#xff08;Windows/Linux/Mac通用&#xff09; 进入JMe…

2025年渗透测试面试题总结-渗透岗位全职工作面试(附回答)(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一、通用基础类问题 1. 自我介绍 2. 职业动机与规划 3. 加班/出差接受度 二、安全技术类问题 1. 漏…

使用DEEPSEEK快速修改QT创建的GUI

QT的GUI&#xff0c;本质上是使用XML进行描述的&#xff0c;在QT CREATOR的界面编辑处&#xff0c;按CTRL2 切换到代码视图&#xff0c;CTRL3切换到编辑器视图。 CTRL2 切换到代码视图 CTRL3 切换到编辑器视图 鼠标左键点击代码视图中&#xff0c;按CTRLA → CTRLC复制XML代码…