OpenCV笔记之solvePnP函数和calibrateCamera函数对比

news2024/11/13 9:57:22

OpenCV笔记之solvePnP函数和calibrateCamera函数对比

文章目录

  • OpenCV笔记之solvePnP函数和calibrateCamera函数对比
    • 1.cv::solvePnP
    • 2.cv::solvePnP函数的用途和工作原理
    • 3.cv::solvePnP背后的数学方程式
    • 4.cv::SOLVEPNP_ITERATIVE、cv::SOLVEPNP_EPNP、cv::SOLVEPNP_P3P
    • 5.一个固定位置的棋盘格标定板的一张图像就可以使用cv::solvePnP标定处相机的外参吗?
    • 6.关于相机坐标系的XYZ方向
    • 7.关于世界坐标的原点位置
    • 8.cv::calibrateCamera
    • 9.cv::calibrateCamera和cv::solvePnP对比

1.cv::solvePnP

在这里插入图片描述

2.cv::solvePnP函数的用途和工作原理

在这里插入图片描述

3.cv::solvePnP背后的数学方程式

在这里插入图片描述

4.cv::SOLVEPNP_ITERATIVE、cv::SOLVEPNP_EPNP、cv::SOLVEPNP_P3P

当使用 cv::solvePnP 函数来解算相机姿态时,您可以选择不同的解算方法,这些方法用于确定物体在相机坐标系中的旋转和平移变换。下面我将详细解释三种常用的解算方法:cv::SOLVEPNP_ITERATIVEcv::SOLVEPNP_EPNPcv::SOLVEPNP_P3P

  1. cv::SOLVEPNP_ITERATIVE

    cv::SOLVEPNP_ITERATIVE 方法是一种迭代求解相机姿态的方法。它基于迭代优化算法,在每一步迭代中,它将计算物体点的投影并与图像上的对应点进行比较,然后调整相机姿态以最小化投影误差。这个方法通常对初始姿态的猜测要求不高,因此适用于各种场景,但可能需要更多的迭代步骤才能收敛到准确的解。

  2. cv::SOLVEPNP_EPNP

    cv::SOLVEPNP_EPNP 方法使用 EPnP(Efficient Perspective-n-Point)算法来求解相机姿态。EPnP 是一种快速而精确的方法,特别适用于含有较少物体点(通常为4个)的情况。它要求提供物体点在物体坐标系中的坐标,以及这些点在图像上的投影,然后通过求解非线性方程组来计算相机姿态。由于使用了更少的点,cv::SOLVEPNP_EPNP 可能比其他方法更快且更准确。

  3. cv::SOLVEPNP_P3P

    cv::SOLVEPNP_P3P 方法是一种采用 P3P(Perspective-Three-Point)算法的方法。它要求至少提供3对物体点和图像点的对应关系,然后通过求解一个三次方程组来计算相机姿态。由于仅需要3对点,因此这个方法对于标定板等具有三个已知角点的场景非常有效。但是,由于使用了较少的点,可能会导致解的不稳定性。

在选择解算方法时,需要考虑数据的质量、物体的特性以及计算速度等因素。如果您拥有更多的对应点,可能更倾向于使用 cv::SOLVEPNP_ITERATIVE 方法。如果您有少量的点且需要更快的计算速度,可以尝试 cv::SOLVEPNP_EPNP 方法。对于只有三个已知角点的场景,cv::SOLVEPNP_P3P 方法可能是一个不错的选择。

总之,选择合适的解算方法取决于您的具体应用场景和数据特点。您可以根据问题的需求和性能要求来选择最适合的方法。

5.一个固定位置的棋盘格标定板的一张图像就可以使用cv::solvePnP标定处相机的外参吗?

是的,使用一张固定位置的棋盘格标定板图像可以使用 cv::solvePnP 来估计相机的外参。这是一种相机标定的方法,其中你提供了标定板在世界坐标系中的物理坐标,以及在图像中检测到的标定板角点的像素坐标。通过这些信息,cv::solvePnP 可以计算出相机的旋转和平移向量(外参),从而确定相机的姿态和位置。

使用一张图像和固定位置的标定板,首先检测标定板的角点,然后使用 cv::solvePnP 计算相机的外参,包括旋转矩阵和平移向量。通过将旋转向量转换为旋转矩阵,并将其与平移向量组合在一起,你可以得到一个完整的外参矩阵,表示相机在世界坐标系中的姿态和位置。

这种方法适用于在已知的标定板位置和相机内参情况下估计相机的外参。然后,你可以使用估计的外参来将相机拍摄的图像映射到世界坐标系中,或者将世界坐标映射到图像坐标中,以便进行其他操作,比如增强现实、位姿估计等。

6.关于相机坐标系的XYZ方向

在计算机视觉中,通常使用的相机坐标系(Camera Coordinate System)与一般的三维坐标系有所不同。在相机坐标系中,相机本身是位于原点的,其视线方向通常与Z轴平行,而X轴和Y轴则与图像平面的水平和垂直方向相对应。这意味着:

  • X轴:指向图像的右侧,与图像平面的水平方向平行。
  • Y轴:指向图像的下方,与图像平面的垂直方向平行。
  • Z轴:指向相机的观察方向,与视线方向平行。

需要注意的是,相机坐标系通常是针对相机设备本身定义的坐标系,而不同的相机可能有不同的约定。在使用cv::solvePnP进行相机标定时,你提供的物理坐标点(标定板角点的物理坐标)与相机坐标系之间的关系将用于估计相机的外参(旋转和平移)。因此,确保在标定时使用一致的坐标系约定非常重要。

7.关于世界坐标的原点位置

在这里插入图片描述

对于车载传感器标定:世界坐标系一般会选择与车辆坐标系完全重合,即世界坐标系的原点为车辆坐标系的原点——车辆后轴中心

8.cv::calibrateCamera

在这里插入图片描述

9.cv::calibrateCamera和cv::solvePnP对比

在这里插入图片描述

  • 1.cv::solvePnP可以用一张棋盘格的图像进行相机外参标定
  • 2.cv::calibrateCamera可以用多张棋盘格的图像进行相机外参标定

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

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

相关文章

AI项目二:基于mediapipe的虚拟绘画

若该文为原创文章,转载请注明原文出处。 一、项目介绍 随着人工智能时代的到来,许多技术得到了空前的发展,让人们更加认识到了线上虚拟技术的强大。 通过mediapipe识别手的关键点,检测中指,实现隔空画画的操作。 通…

Linux/Ubuntu 的日常升级和安全更新,如何操作?

我安装的是Ubuntu 20.04.6 LTS的Windows上Linux子系统版本,启动完成后显示: Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.15.90.4-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.c…

ros小车实现slam_gmapping建图

ros小车2d建图,如果有雷达,那么使用gmapping方式建图,其实就一个命令,启动建图程序,它默认会启动小车,之后,我们通过手柄或者键盘控制小车就可以有地图产生,然后就需要保存地图&…

【高级IO】- 五种 IO 模型 | 多路转接 - select

IO的基本概念 I/O(Input / output)就是输入和输出,在冯诺依曼体系中,将数据从输入设备拷贝到内存叫做输入,将数据从内存拷贝到输出设备叫做输出。 对文件进行的读写操作本质就是一种IO,文件IO对应的外设就…

【2023最新爬虫】爬取知乎任意问题下的全部回答

老规矩,先上结果: 爬取了前200多页,每页5条数据,共1000多条回答。(程序设置的自动判断结束页,我是手动break的) 共爬到13个字段,包含: 问题id,页码,答主昵称,答主性别,…

【Python】json文件的读取

文章目录 1. json简介2.json的使用规范3.json文件的书写4.json文件的读取 1. json简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将结构化数据进行传输和存储。它基于JavaScript语法,但可以被多种编程…

玩机搞机----面具模块的组成 制作模块

root面具相信很多玩家都不陌生。早期玩友大都使用第三方卡刷补丁来对系统进行各种修复和添加功能。目前面具补丁代替了这些操作。今天的帖子了解下面具各种模块的组成和几种普遍的代码组成。 Magisk中运行的每个单独的shell脚本都将在内部的BusyBox的shell中执行。对于与第三方…

(排序) 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 ——【Leetcode每日一题】

❓剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 难度:简单 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 示例: 输入:nums [1…

绘制原型图的常用工具之墨刀

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于OA项目的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.墨刀是什么 二.墨刀的作用 三.墨刀界…

opencv-手势识别

# HandTrackingModule.py import cv2 import mediapipe as mpclass HandDetector:"""使用mediapipe库查找手。导出地标像素格式。添加了额外的功能。如查找方式,许多手指向上或两个手指之间的距离。而且提供找到的手的边界框信息。"""…

【MySQL】JSON 格式字段处理

MySQL 5.7 版本后已支持 JSON 格式,这虽是 MySQL 的一小步,但可以说是程序开发的一大步,再也不用将 JSON 内容塞到 VARCHAR 类型字段了,程序设计也会变得更加灵活。网上大多只针对JSONObject 对象类型,本文也将详解 JS…

Linux网络服务之iptables防火墙工具

I P T A B L E S 一、防火墙简介1.1 netfilter1.2 firewalld和iptables 二、iptables工具简述2.1 定义2.2 三种报文流向2.3 iptables的表、链结构(非常重要)2.3.1 "四表" ----- 规则表2.3.2 "五链" ----- 规则链 三、iptables配置3.…

适合低成本兼职的十个职业,做得好可能比上班挣得还多

这个年头干点什么兼职或者副业比较合适的,其实做兼职和副业就那么几条原则:最好是轻资产或者不投入资金,因为这个年代是现金流和储蓄为王,不能乱投资,一旦出了差错,更是雪上加霜。还有就是最好在网络上做兼…

对话音视频牛哥:开发RTSP|RTMP直播播放器难不难?难在哪?

我关注的播放器指标 好多开发者跟我交流音视频相关技术的时候,经常问我的问题是,多久可以开发个商业级别的RTMP或RTSP播放器?你们是怎样做到毫秒级延迟的?为什么一个播放器,会被你们做到那么复杂?带着这些…

一文详解4种聚类算法及可视化(Python)

在这篇文章中,基于20家公司的股票价格时间序列数据。根据股票价格之间的相关性,看一下对这些公司进行聚类的四种不同方式。 苹果(AAPL),亚马逊(AMZN),Facebook(META&…

裴蜀定理-拓展欧几里得算法--夏令营

题目 知识点 1.裴蜀定理: 欧几里得算法gcd辗转相除法 拓展欧几里得算法exgcd裴蜀定理 2.证明: 3.. 代码: int exgcd(int a, int b, int& x, int& y) {if (!b){x 1, y 0;return a;}int d exgcd(b, a % b, y, x);y - a / b * x;…

rabbitMq安装后无法启动可视化页面http://localhost:15672处理

本次安装环境信息: 系统:win10 64位专业版 erlang:otp_win64_23.0 rabbitMQ:rabbitmq-server-3.8.5 安装rabbitMQ需要依赖erlang语言环境,所以需要我们下载erlang的环境安装程序。 一、下载安装程序 rabbitMQ安装…

Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!

1、Lombok 使用演示 Lombok 使⽤同时使⽤ Data 和 Builder ,构建无参构造器报错!编译不通过。如下图: Lombok 使⽤ Data 可以自动⽣成⽆参构造和类⾥⾯所有属性的 getter/setter ⽅法。可以简化我们代码的开发。(IDEA 需要安装 L…

Redis主从复制搭建

Redis主从复制搭建 Redis虽然拥有非常高的性能,但是在实际的生产环境中,使用单机模式还是会产生不少问题的,比如说容易出现 单机故障,容量瓶颈,以及QPS瓶颈等问题。通常环境下,主从复制、哨兵模式、Redis…

从关键新闻和最新技术看AI行业发展(2023.6.23-7.9第二期) |【WeThinkIn老实人报】

Rocky Ding 公众号:WeThinkIn 写在前面 【WeThinkIn老实人报】是WeThinkIn的全新栏目,旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的…