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

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

算法描述

从姿态估计绘制世界/物体坐标系的轴。

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

函数原型

cpp 复制代码
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轴用蓝色绘制。

代码示例

cpp 复制代码
#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;
}

运行结果

相关推荐
whuzhang1614 小时前
3dgs通俗讲解
3d
jndingxin14 小时前
OpenCV 图形API(11)对图像进行掩码操作的函数mask()
人工智能·opencv·计算机视觉
阳光_你好15 小时前
请详细说明opencv/c++对图片缩放
c++·opencv·计算机视觉
契合qht53_shine15 小时前
OpenCV 从入门到精通(day_05)
人工智能·opencv·计算机视觉
3DVisionary15 小时前
3D-DIC与机器学习协同模拟材料应力-应变本构行为研究
人工智能·机器学习·3d·3d-dic技术 机器学习·应力-应变本构行为·卷积神经网络(ecnn)·数字图像相关法(dic)
xcLeigh16 小时前
OpenCV从零开始:30天掌握图像处理基础
图像处理·人工智能·python·opencv
千鼎数字孪生-可视化16 小时前
3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。
ui·3d·信息可视化·数据分析
新知图书17 小时前
OpenCV单窗口显示多图片
人工智能·opencv·计算机视觉
荷包蛋蛋怪17 小时前
【北京化工大学】 神经网络与深度学习 实验6 MATAR图像分类
人工智能·深度学习·神经网络·opencv·机器学习·计算机视觉·分类
QQ_77813297417 小时前
OpenCV引擎:驱动实时应用开发的科技狂飙
opencv·计算机视觉