5_相机标定2_calibrateCamera()与内外参

da93e208d5e528f466ba6770a7074934.png

彩色角点图片镇楼

opencv官方文档:

https://docs.opencv.org/4.8.0/d4/d94/tutorial_camera_calibration.html 

https://docs.opencv.org/3.4.18/d9/d0c/group__calib3d.html#gaebfc1c9f7434196a374c382abf43439b

相机标定目的:

cv::calibrateCamera()的函数调用可以得到相机内参矩阵畸变系数旋转矩阵平移矩阵(即每一幅图像的姿态和位置)。前两者构成相机内参,后两者称为外参。

畸变系数可以用来矫正图像。使用工业相机标定后,感觉图像畸变很小,所以买了一个USB免驱的摄像头(100块),货到之后再标定相机一次看看效果。相机内参矩阵可以让我们将3D坐标转为2D图像坐标。

double  cv::calibrateCamera( 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) );

objectPoints:

12c43d2e61c00cbb3bdc539f9eeb0aa6.png

fdf84229f6c90510ebc64b72d36fbd6a.png

4284dd1f399170587206a4bfd1003b40.png

3713d5424d21741393207ad5fd80e7bc.png

imagePoints: 使用标定板标定时,直接填findCirclesGrid()返回值.

imageSize:图像的像素大小

cameraMatrix和distCoeffs是相机的内参。前者是线性内参,是3×3矩阵。后者可能是是4、5、8个元素。4:k1,k2,p1,p2.  5:k1,k2,p1,p2,k3. 五元素形式通常只适用于鱼眼透镜。只有设置cv::CALIB_RATIONAL_MODE时,且对非常高精度的特殊透镜进行校准时,才能使用8个元素。注意,需要的图像数量随着求解参数数量而急剧增加。    

rvecs和tvecs是外参信息。它们说明在每幅图片中标定板相对于相机的姿态和位置。需要注意的是:旋转以Rodrigues形式表示,即以三分量向量表示,不是之前机器人学里面所述3×3矩阵表示的姿态,而是棋盘绕相机坐标系下三维空间的坐标轴的旋转,其中每个向量的长度表示逆时针旋转的角度。可通过Rodrigues()转为3×3矩阵。如前所述,相机坐标系的单位以棋盘格的方块单位为准,即cv::Size squareSize = cv::Size(10,10)(如有误再勘正)。根据上篇文章,是10cm.

通过优化方法找到这些参数是一个富有技巧性的工作。如果设置的初始值位置远离实际解,有时试图一次性求解所有参数会导致结果不精确或者不收敛。因此通常需要猜测解以得到更好地初始值。因此我们常常固定某些参数而求另外一些参数,然后再固定另外的参数求解原始的固定参数。依次往复,最后可以认为所有参数都接近真实解,然后使用所有参数作为初始值一次性输入。OpenCV允许你控制所有的标志位。标志位变量是用来做某些细微的控制使得标定能够完成的更好。

ps:觉得还是旧版学习OpenCV好一些。写这么多,都是在介绍函数接口如何使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2870012.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Arthas使用案例(二)

说明:记录一次使用Arthas排查测试环境正在运行的项目BUG; 场景 有一个定时任务,该定时任务是定时去拉取某FTP服务器上的文件,进行备份、读取、解析等一系列操作。 而现在,因为开发环境是Windows, 线上项…

SpringBoot(数据库操作 + druid监控功能)

文章目录 1.JDBC HikariDataSource(SpringBoot2默认数据源)1.数据库表设计2.引入依赖 pom.xml3.配置数据源参数 application.yml4.编写一个bean,映射表5.编写测试类来完成测试1.引入依赖 pom.xml2.使用JdbcTemplate进行测试3.成功&#xff0…

将OpenCV与gcc和CMake结合使用

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇: 引言: 近年来,计算机视觉技术在图像处理、目标检测和机器人等方面得到了广泛的应用…

YOLOv9改进策略:注意力机制 | 归一化的注意力模块(NAM)

💡💡💡本文改进内容: NAM作为一种高效且轻量级的注意力机制。采用了CBAM的模块集成并重新设计了通道和空间注意子模块。 yolov9-c-NAMAttention summary: 965 layers, 51000614 parameters, 51000582 gradients, 238.9 GFLOPs 改…

服务器机器学习环境搭建(包括AanConda的安装和Pytorch的安装)

服务器机器学习环境搭建 1 服务器与用户 在学校中,我们在学校中是以用户的身份进行访问学校的服务器的。整体框架大致如下: 我们与root用户共享服务器的一些资源,比如显卡驱动,Cuda以及一些其他的公共软件。 一般情况下&#…

迷茫了!去大厂还是创业?

大家好,我是麦叔,最近我创建了一个 学习圈子 有球友在 星球 里提问。 大厂的layout岗位和小厂的硬件工程师岗位,该如何选择? 这个问题我曾经也纠结过,不过现在的我,I am awake! 肯定是有大点大。…

【Java基础知识总结 | 第二篇】深入理解分析ArrayList源码

文章目录 3.深入理解分析ArrayList源码3.1ArrayList简介3.2ArrayLisy和Vector的区别?3.3ArrayList核心源码解读3.3.1ArrayList存储机制(1)构造函数(2)add()方法(3)新增元素大体流程 3.3.2ArrayL…

探索设计模式的魅力:探索发布-订阅模式的深度奥秘-实现高效、解耦的系统通信

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,并坚持默默的做事。 探索发布-订阅模式的深度奥秘:实现高效、解耦的系统通信 文章目录 一、案例场景&am…

【四 (5)数据可视化之 Pyecharts常用图表及代码实现 】

目录 文章导航一、介绍[✨ 特性]二、安装Pyecharts三、主题风格四、占比类图表1、饼图2、环形图3、玫瑰图4、玫瑰图-多图5、堆叠条形图6、百分比堆叠条形图 五、比较排序类1、条形图2、雷达图3、词云图4、漏斗图 六、趋势类图表1、折线图2、堆叠折线图3、面积图4、堆叠面积图 七…

创建硬件企业的8个要求

目录 内容简介 1. 长期愿景和目标 2. 适应和学习能力 3. 能够理解技术方面的信息 4. 建立关系的能力 5. 现金流 6. 可用时间和资金平衡 7. 一次专注于一种产品 8. 实现长期成功的耐心 CSDN学院 专栏作家 内容简介 为了创建成功的硬件产品,你需要具备各种…

如何在Windows系统搭建Emby影音平台并实现远程访问本地文件【内网穿透】

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…

Linux系统安全②SNAT与DNAT

目录 一.SNAT 1.定义 2.实验环境准备 (1)三台服务器:PC1客户端、PC2网关、PC3服务端。 (2)硬件要求:PC1和PC3均只需一块网卡、PC2需要2块网卡 (3)网络模式要求:PC1…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的自动驾驶目标检测系统详解(深度学习+Python代码+PySide6界面+训练数据集)

摘要:开发自动驾驶目标检测系统对于提高车辆的安全性和智能化水平具有至关重要的作用。本篇博客详细介绍了如何运用深度学习构建一个自动驾驶目标检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLO…

IntelliJ IDEA 2023.3.4创建JavaWeb应用和集成Tomcat服务器

1. 创建项目 如下图所示,只需要给项目起一个项目名称,然后点击Create即可: 2. Project Structure 设置 创建完成后如下图 3. 集成Tomcat服务器 4. 实现Servlet接口 当我们实现Servlet接口时,发现没有Servlet相关的依赖时&am…

AcWing 2. 01背包问题

题目描述 解题思路: 相关代码: import java.util.Scanner; public class Main {public static void main(String[] args){Scanner scanner new Scanner(System.in);/** 背包问题的物品下标最好从1开始。* *//*定义一f[i][j]数组,i表示的…

PDF Expert:强大注释与批注功能,让PDF阅读更高效

PDF Expert软件是一款功能丰富且强大的PDF编辑和管理工具,为用户提供了全面的PDF处理解决方案。以下是其主要的功能特色介绍: PDF编辑功能:PDF Expert允许用户对PDF文件进行深度编辑。这包括但不限于添加、删除、重新排列和合并页面&#xff…

SQLiteC/C++接口详细介绍之sqlite3类(十四)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(十三) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十五) 43.sqlite3_preupdate_hook sqlite3_preup…

Camtasia 2023 中文MacOS

Camtasia 2023软件在录屏软件中的确表现突出,可以说是佼佼者之一。这款软件不仅功能强大,而且操作简便,适用于各种屏幕录制和视频编辑需求。 一、屏幕录制与视频导入 Camtasia 2023提供了高清的屏幕录制功能,可以轻松地捕捉电脑…

SpringCloud-深度理解ElasticSearch

一、Elasticsearch概述 1、Elasticsearch介绍 Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,构建在Apache Lucene基础上。它提供了一个强大而灵活的工具,用于全文搜索、结构化搜索、分析以及数据可视化。ES最初设计用…

应用程序开发教学:医保购药系统源码搭建实战

医保购药系统作为医疗服务的重要组成部分,其开发不仅能够为患者提供更加便捷的购药服务,还能够提高医疗机构的管理效率。接下来,小编将为您讲解医保购药系统的源码搭建过程,介绍应用程序开发的基本步骤和技巧。 一、系统设计 我…