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;
}

运行结果

相关推荐
小伍_Five15 小时前
从0开始:OpenCV入门教程【图像处理基础】
图像处理·python·opencv
m0_7482323920 小时前
基于OpenCV和Python的人脸识别系统_django
python·opencv·django
Hali_Botebie21 小时前
【蒸馏(1)】UniDistill:用于BEV 3D检测的通用跨模态蒸馏框架!
3d
MediaTea21 小时前
Ae 效果详解:3D 通道提取
3d
3DVisionary21 小时前
XTOP3D的DIC技术在极端条件下的应用解决方案
数码相机·3d·航空工业·全场应变测量·航空机匣内部四测头同步测量·反射镜辅助dic观测·四测头方案
深图智能1 天前
OpenCV 4.10.0 图像处理基础入门教程
图像处理·opencv·计算机视觉
吃个糖糖1 天前
Halcon 3D加快表面匹配速度
3d
old_power2 天前
Linux(Ubuntu24.04)源码编译安装OpenCV4.6.0
linux·opencv
萧鼎2 天前
利用 OpenCV 进行棋盘检测与透视变换
人工智能·opencv·计算机视觉
mirrornan2 天前
3D全景沉浸式看车:虚拟现实重构汽车消费新体验
科技·3d·汽车·vr·3d数字化·3d看车