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

OpenCV相机标定与3D重建(23)用于在图像上绘制世界坐标系的三条轴函数drawFrameAxes()的使用

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

算法描述

从姿态估计绘制世界/物体坐标系的轴。
cv::drawFrameAxes 是 OpenCV 库中的一个函数,用于在图像上绘制世界坐标系的三条轴(通常为X、Y和Z轴),这有助于可视化相机的姿态或物体的位置。此函数常用于增强现实、机器人视觉、3D重建等领域,以帮助理解或调试空间关系。

函数原型

void cv::drawFrameAxes	
(
	InputOutputArray 	image,
	InputArray 	cameraMatrix,
	InputArray 	distCoeffs,
	InputArray 	rvec,
	InputArray 	tvec,
	float 	length,
	int 	thickness = 3 
)		

参数

  • 参数image 输入/输出图像。它必须有1或3个通道。通道数量不会被改变。
  • 参数cameraMatrix 输入的3×3 浮点数矩阵,表示相机的内参矩阵。 A = [ f x 0 c x 0 f y c y 0 0 1 ] A = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} A= fx000fy0cxcy1
  • 参数distCoeffs 输入的畸变系数向量 ( k 1 , k 2 , p 1 , p 2 [ , k 3 [ , k 4 , k 5 , k 6 [ , s 1 , s 2 , s 3 , s 4 [ , τ x , τ y ] ] ] ] ) (k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6[, s_1, s_2, s_3, s_4[, \tau_x, \tau_y]]]]) (k1,k2,p1,p2[,k3[,k4,k5,k6[,s1,s2,s3,s4[,τx,τy]]]]),包含4、5、8、12或14个元素。如果该向量为空,则假设畸变为零。
  • 参数rvec 旋转向量(见 Rodrigues 公式),与 tvec 一起将模型坐标系中的点转换到相机坐标系中。
  • 参数tvec 平移向量。
  • 参数length 绘制的轴的长度,单位与 tvec 相同(通常为米)。
  • 参数thickness 绘制的轴的线宽。

此函数绘制世界/物体坐标系相对于相机坐标系的轴。OX轴用红色绘制,OY轴用绿色绘制,OZ轴用蓝色绘制。

代码示例


#include <opencv2/calib3d/calib3d.hpp>  // 确保包含了必要的头文件
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 假设我们已经有了以下参数
    Mat cameraMatrix = ( Mat_< double >( 3, 3 ) << 400, 0, 220, 0, 400, 140, 0, 0, 1 );  // 示例相机内参矩阵
    Mat distCoeffs   = Mat::zeros( 5, 1, CV_64F );                                       // 假设没有畸变或已校正

    // 示例旋转和平移向量(实际应用中这些应该通过姿态估计获得)
    Vec3d rvec( 0.01, 0.02, 0.03 );  // 旋转向量
    Vec3d tvec( 0.1, 0.2, 0.3 );     // 平移向量

    // 加载一张图片作为背景
    Mat image = imread( "/media/dingxin/data/study/OpenCV/sources/images/line.jpg" );  // 替换为你的图像路径
    if ( image.empty() )
    {
        cout << "Could not open or find the image!" << endl;
        return -1;
    }

    // 定义轴的长度(单位与 tvec 相同,通常是米)
    float axis_length = 0.1;

    // 绘制坐标轴
    drawFrameAxes( image, cameraMatrix, distCoeffs, rvec, tvec, axis_length );

    // 显示结果图像
    imshow( "Image with Axes", image );
    waitKey( 0 );  // 按任意键退出

    return 0;
}

运行结果

在这里插入图片描述


http://www.kler.cn/a/444667.html

相关文章:

  • html 中 表格和表单的关系与区别
  • python如何获取excel单元格文字是否加粗
  • 【Java基础面试题024】Java中包装类型和基本类型的区别是什么?
  • 【python虚拟环境安装】linux centos 下的python虚拟环境配置
  • 电商数据采集电商,行业数据分析,平台数据获取|稳定的API接口数据
  • 算法-Z-order算法
  • 由学习率跟batch size 关系 引起的海塞矩阵和梯度计算在训练过程中的应用思考
  • 浅谈文生图Stable Diffusion(SD)相关模型基础
  • 大屏项目使用css混合实现光源扫描高亮效果
  • 【docker】如何打包前端并运行
  • 点击数字层级从 admin.vue 跳转到 inviter-list.vue 组件
  • HCIA-Access V2.5_4_1_1路由协议基础_IP路由表
  • PLE网络中跷跷板现象和负迁移现象说明及其对应的解决方法
  • VUE小数位问题:JS当中toFixed()方法5不进位问题的处理
  • 物联网关:机床设备管理的智能变革“利器”
  • WebSocket vs SSE:实时通信技术的对比与选择
  • Vue2/3 生命周期详细对比与使用指南
  • 2009 ~ 2019 年 408【计算机网络】大题解析
  • 深度学习-74-大语言模型LLM之基于API与llama.cpp启动的模型进行交互
  • 如何对 Node.js更好的理解?都有哪些优缺点?哪些应用场景?
  • 智能客户服务:AI与大数据的革新力量
  • element plus的table组件,点击table的数据是,会出现一个黑色边框
  • Java 8新特性:Lambda表达式与Stream API的实践指南
  • 编译原理复习---正则表达式+有穷自动机
  • 《Vue 响应式数据原理》
  • 微服务设计原则——功能设计