OpenCV相机标定与3D重建(44)初始化广角(鱼眼)相机的投影映射函数initWideAngleProjMap()的使用

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

算法描述

cv::initWideAngleProjMap 是 OpenCV 库中的一个函数,用于初始化广角(鱼眼)相机的投影映射。这个函数生成两个映射 map1 和 map2,它们可以被用来对图像进行去畸变和重投影变换。

函数原型

cpp 复制代码
float cv::initWideAngleProjMap	
(
	InputArray 	cameraMatrix,
	InputArray 	distCoeffs,
	Size 	imageSize,
	int 	destImageWidth,
	int 	m1type,
	OutputArray 	map1,
	OutputArray 	map2,
	enum UndistortTypes 	projType = PROJ_SPHERICAL_EQRECT,
	double 	alpha = 0 
)	

参数

  • 参数cameraMatrix: 相机的内参矩阵,它是一个3x3的矩阵,包含了焦距、主点位置等信息。
  • 参数distCoeffs: 畸变系数向量,描述了图像畸变的程度。对于广角或鱼眼镜头,这些系数可能包含径向和切向畸变项。
  • 参数imageSize: 输入图像的尺寸,以像素为单位,格式为 cv::Size(width, height)。
  • 参数destImageWidth: 指定输出图像的宽度,这可以与输入图像的宽度不同,允许调整输出图像的比例。
  • 参数m1type: 定义 map1 的数据类型,通常是 CV_32FC1 或者 CV_16SC2。
  • 参数map1 和 map2: 这两个是输出参数,表示从原始图像到去畸变后图像的映射关系。map1 包含 x 方向的映射坐标,map2 包含 y 方向的映射坐标。
  • 参数projType: 指定用于去畸变和重新投影的类型。不同的值代表不同的投影模型,默认值是 PROJ_SPERSICAL_EQRECT,即等距球面投影。
  • 参数alpha: 控制输出图像中保留了多少原始图像的信息。alpha=0 时会尽可能多地保留图像内容,而 alpha=1 则只会保留完全没有畸变的区域。

代码示例

cpp 复制代码
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 假设我们已经有一个相机内参矩阵和畸变系数
    Mat cameraMatrix = ( Mat_< double >( 3, 3 ) << 500, 0, 320, 0, 500, 240, 0, 0, 1 );
    Mat distCoeffs   = ( Mat_< double >( 5, 1 ) << 1.0, 0.5, -0.2, 0.1, 0.05 );

    // 图像尺寸
    Size imageSize( 640, 480 );

    // 目标图像宽度
    int destImageWidth = 640;

    // 定义map类型
    int m1type = CV_32FC1;

    // 创建映射
    Mat map1, map2;
    float destImageHeight = cv::initWideAngleProjMap( cameraMatrix, distCoeffs, imageSize, destImageWidth, m1type, map1, map2,
                                                      cv::PROJ_SPHERICAL_EQRECT,  // 投影类型
                                                      0                           // alpha 参数
    );

    // 加载原始图像
    Mat img = imread( "path_to_image.jpg" );
    if ( img.empty() )
    {
        cout << "Could not open or find the image!" << endl;
        return -1;
    }

    // 应用映射进行去畸变
    Mat undistortedImg;
    remap( img, undistortedImg, map1, map2, INTER_LINEAR );

    // 显示结果
    imshow( "Original Image", img );
    imshow( "Undistorted Image", undistortedImg );
    waitKey( 0 );

    return 0;
}
相关推荐
格林威6 分钟前
Baumer相机金属焊缝缺陷识别:提升焊接质量检测可靠性的 7 个关键技术,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
困死,根本不会1 小时前
OpenCV摄像头实时处理:基于 HSV 颜色空间的摄像头实时颜色筛选工具
人工智能·opencv·计算机视觉
Sagittarius_A*1 小时前
角点检测:Harris 与 Shi-Tomasi原理拆解【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉
困死,根本不会2 小时前
OpenCV实时摄像头处理:曝光调节、降噪与二值化实战
人工智能·opencv·计算机视觉
Sagittarius_A*3 小时前
形态学与多尺度处理:计算机视觉中图像形状与尺度的基础处理框架【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉
茶栀(*´I`*)3 小时前
【OpenCV 视觉全栈进阶】核心特征提取:模板匹配与霍夫变换(线/圆检测)深度技术指南
图像处理·opencv·计算机视觉
格林威5 小时前
Baumer相机金属弹簧圈数自动计数:用于来料快速检验的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
困死,根本不会5 小时前
OpenCV摄像头实时处理:从单特征到联合识别(形状识别 + 颜色识别 + 形状颜色联合识别)
人工智能·opencv·计算机视觉
图生生6 小时前
基于AI的电商产品2D转3D,降低3D建模开发成本
3d·ai