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

运行结果

相关推荐
陈天伟教授19 小时前
eDrawings 2026 x64 Edition-免费 3D 模型和 2D 工程图查看器
3d
sali-tec1 天前
C# 基于OpenCv的视觉工作流-章93-YOLO手部姿态
图像处理·人工智能·数码相机·opencv·yolo·计算机视觉
hhzz2 天前
基于监控视频的水位尺自动识别技术方案与实现
python·opencv·yolo·图像识别·cv
Tian_Hang2 天前
eclipse ditto 学习笔记
运维·服务器·开发语言·javascript·3d
林中青木2 天前
OpenCV 5.0 使用方法及注意事项
人工智能·opencv·计算机视觉
漂亮的摩托2 天前
基于OpenCV与SVM的车牌识别系统实现:定位、分割与分类全流程解析
opencv·支持向量机·分类
AI视觉网奇2 天前
BambuStudio 编译实战 2026
3d
AI前沿资讯2 天前
AI3D角色生产如何减少返工?用 V2Fun 前移建模与动画流程
人工智能·3d
蓝速科技2 天前
蓝速科技视觉 3D 全息舱 AI 数字人一体机带灯与无灯款深度评测
人工智能·科技·3d
尘中远2 天前
【Qwt 7.0 系列】3D 数据可视化 —— OpenGL 高性能三维绘图
qt·3d·qcustomplot·qwt·科学绘图·高性能绘图