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

OpenCV相机标定与3D重建(6)将3D物体点投影到2D图像平面上函数projectPoints()的使用

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

算法描述

cv::fisheye::projectPoints 是 OpenCV 库中用于鱼眼镜头模型的函数,它将3D物体点投影到2D图像平面上。这个函数对于模拟或者理解鱼眼镜头如何将三维空间中的点映射到二维图像上非常有用

函数原型

void cv::fisheye::projectPoints	
(InputArray 	objectPoints,OutputArray 	imagePoints,const Affine3d & 	affine,InputArray 	K,InputArray 	D,double 	alpha = 0,OutputArray 	jacobian = noArray() 
)	

函数说明

  • 该函数根据相机的内参和外参计算3D点到图像平面的投影。
  • 可选地,该函数计算雅可比矩阵——图像点坐标(作为所有输入参数的函数)相对于特定参数(内参和/或外参)的部分导数矩阵。

参数

  • 参数objectPoints: 物体点数组,1xN/Nx1 的 3 通道(或 vector),其中 N 是视图中的点数。
  • 参数imagePoints: 输出的图像点数组,2xN/Nx2 的 1 通道或 1xN/Nx1 的 2 通道,或 vector。
  • 参数affine: 仿射变换。
  • 参数K: 相机内参矩阵 cameramatrixK。
  • 参数D: 输入的畸变系数向量 (k1, k2, k3, k4)。
  • 参数alpha: 偏斜系数。
  • 参数jacobian: 可选输出的 2Nx15 雅可比矩阵,表示图像点相对于焦距分量、主点坐标、畸变系数、旋转向量、平移向量和偏斜的导数。在旧接口中,雅可比的不同分量通过不同的输出参数返回。

代码示例

#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 定义3D物体点std::vector<cv::Point3f> objectPoints;objectPoints.push_back(cv::Point3f(0.0f, 0.0f, 1.0f));objectPoints.push_back(cv::Point3f(1.0f, 0.0f, 1.0f));objectPoints.push_back(cv::Point3f(0.0f, 1.0f, 1.0f));// 相机内参矩阵 K 和畸变系数 Dcv::Mat K = (cv::Mat_<double>(3, 3) << 458.654, 0, 367.215, 0, 457.296, 248.375, 0, 0, 1);cv::Mat D = (cv::Mat_<double>(1, 4) << 0.0695303, -0.160713, -0.00480225, 0.000911994);// 创建一个单位矩阵作为仿射变换cv::Affine3d affine = cv::Affine3d::Identity();// 输出的2D图像点cv::Mat imagePoints;cv::fisheye::projectPoints(objectPoints, imagePoints, affine, K, D);// 打印结果for (int i = 0; i < imagePoints.rows; ++i) {std::cout << "Image Point: (" << imagePoints.at<float>(i, 0) << ", " << imagePoints.at<float>(i, 1) << ")" << std::endl;}return 0;
}

运行结果

Image Point: (367.215, 248.375)
http://www.lryc.cn/news/493148.html

相关文章:

  • 【Linux】剧幕中的灵魂更迭:探索Shell下的程序替换
  • 38 基于单片机的宠物喂食(ESP8266、红外、电机)
  • Unity中的数学应用 之 角色移动中单位化向量的妙用 (小学难度)
  • 设置ip和代理DNS的WindowsBat脚本怎么写?
  • 字符串分割转换(Java Python JS C++ C )
  • 【Maven】项目创建
  • number的++和--运算 C#
  • 浅谈网络 | 应用层之HTTPS协议
  • 2、Three.js初步认识场景Scene、相机Camera、渲染器Renderer三要素
  • Deepwave 声波正演和弹性波正演
  • 【WRF-Urban】多层建筑能源参数化模型概述:原理
  • 基于Qt实现的自定义树结构容器:设计与应用
  • 网络命令Linux
  • 简单的Activiti Modoler 流程在线编辑器
  • 【NodeJS】Express写接口的整体流程
  • Oracle 锁表的解决方法及避免锁表问题的最佳实践
  • 关于 vue+element 日期时间选择器 限制只能选当天以及30天之前的日期
  • 租辆酷车小程序开发(二)—— 接入微服务GRPC
  • 如何在 Ubuntu 22.04 上安装 Metabase 数据可视化分析工具
  • MySQL 用户与权限管理
  • 【Web前端】如何构建简单HTML表单?
  • Spring Boot 3 集成 Spring Security(3)数据管理
  • 书生大模型实战营第四期-入门岛-4. maas课程任务
  • Spring ApplicationListener监听
  • K8s调度器扩展(scheduler)
  • IntelliJ IDEA 中,自动导包功能
  • Spring事务笔记
  • SQLite 管理工具 SQLiteStudio 3.4.5 发布
  • QT 实现组织树状图
  • go-学习