【问题标题】:OpenCV How to apply camera distortion to an imageOpenCV如何将相机失真应用于图像
【发布时间】:2021-03-05 17:49:20
【问题描述】:

我有一个渲染图像。我想对从 opencv 获得的图像应用径向和切向失真系数。即使有不失真功能,也没有失真功能。如何使用失真系数扭曲我的图像?

【问题讨论】:

    标签: opencv image-processing distortion


    【解决方案1】:

    我也在寻找相同类型的功能。我找不到它,所以我自己实现了它。这是 C++ 代码。

    首先,您需要使用焦距和中心对图像点进行归一化

    rpt(0) = (pt_x - cx) / fx
    rpt(1) = (pt_y - cy) / fy
    

    然后扭曲归一化的图像点

    double x = rpt(0), y = rpt(1);
    
    //determining the radial distortion
    double r2 = x*x + y*y;
    double icdist = 1 / (1 - ((D.at<double>(4) * r2 + D.at<double>(1))*r2 + D.at<double>(0))*r2);
    
    //determining the tangential distortion
    double deltaX = 2 * D.at<double>(2) * x*y + D.at<double>(3) * (r2 + 2 * x*x);
    double deltaY = D.at<double>(2) * (r2 + 2 * y*y) + 2 * D.at<double>(3) * x*y;
    x = (x + deltaX)*icdist;
    y = (y + deltaY)*icdist;
    

    然后您可以使用投影中心和焦距来平移和缩放点:

    x = x * fx + cx
    y = y * fy + cy
    

    【讨论】:

    • 为了完整起见,我添加了最后一步的公式(转换回图像坐标)。请回滚以防我出错。
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2016-02-18
    • 2023-04-11
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多