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

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

算法描述

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

函数原型

cpp 复制代码
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 雅可比矩阵,表示图像点相对于焦距分量、主点坐标、畸变系数、旋转向量、平移向量和偏斜的导数。在旧接口中,雅可比的不同分量通过不同的输出参数返回。

代码示例

cpp 复制代码
#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 和畸变系数 D
    cv::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;
}

运行结果

bash 复制代码
Image Point: (367.215, 248.375)
相关推荐
在水一缸23 分钟前
Box3D 深度解析:当物理引擎传奇迈向三维空间
3d·游戏开发·开源项目·物理引擎·box3d·3d仿真·box2d
苏州邦恩精密2 小时前
浙江蔡司3D扫描仪应用领域及厂家选择分析
人工智能·科技·3d·自动化·制造
TMT星球2 小时前
高德发布通用世界模型工坊ABot-World Studio: 5090单卡可生成小时级实时交互式视频与3D场景
3d
某林2123 小时前
构建高精度 6-DoF 灵巧手控制系统
人工智能·3d·机器人·ros2·技术复盘
3DVisionary13 小时前
注塑模具3D检测的下一个十年:从“事后把关“到“全程数字孪生“
前端·数据库·3d·注塑模具检测趋势·在线全检自动化·ai缺陷识别·模具数字孪生
cd_9492172113 小时前
3D角色自动绑骨怎么做?用V2Fun完成建模、绑定、动作和导出
人工智能·3d
wuhanzhanhui14 小时前
从 3D 建模到高光谱2026 武汉机器视觉展会|工业相机展会洞见感知力量新高度
数码相机·3d
m0_6174939420 小时前
Python OpenCV 透视变换(Perspective Transform)详解与实战
开发语言·python·opencv
丨白色风车丨1 天前
【Python 计算机视觉】基于 Dlib+OpenCV 实现实时人眼疲劳检测(闭眼预警)
python·opencv·计算机视觉
3DVisionary1 天前
单目高速DIC、双目DIC与传统传感器,谁更适合精密件?
网络·数码相机·3d·性能优化·注塑件全尺寸检测·高频振动测量·悬臂梁面内振动