【问题标题】:OpenCV solvePnP barreldistoritonOpenCV 求解即插即用桶失真
【发布时间】:2013-01-08 07:02:51
【问题描述】:

我正在使用 OpenCVssolvePnP 来获取相机的姿势/位置。 我通过使用用户选择的点来执行此操作,图像上已经校准并应用了径向和切向失真的修复。

但是,除了图像中选择的点之外,solvePnP() 似乎还将失真系数作为输入,我想这意味着 SolvePnP 将失真修复应用于作为函数输入的点。

这会在我的程序中产生一个小错误,因为源图像已经是桶形失真的,对吧?

如果是这样,我怎样才能让solvePnP() 忽略桶形失真?我可以传递一个失真系数设置为 1 的向量吗?或者我应该将所有值设置为 0? 其他方式?

【问题讨论】:

    标签: opencv camera-calibration distortion


    【解决方案1】:

    过去我只是传递了一个空的 cv::Mat

    cv::solvePnP(world_points, image_points, camera_mat, cv::Mat(), rotation_vector, translation_vector);
    

    documentation 表示,如果您传递 NULL,它将为您将所有系数设置为 0。

    【讨论】:

    • 啊,当然。我应该更好地阅读文档。谢谢。另一个问题:关于 camera_mat,如果我使用的图像已经被 initUndistortMap() + remap() 校正过,那么什么样的相机矩阵最适合作为 solvepnp 的输入?校正后的相机矩阵,还是一个简单的 Mat::eye() ?
    • cv::Mat() 替换为cv::noArray() 具有相同的效果,但会使意图更加清晰。
    • @HenrikKjusAlstad 相机矩阵(称为 C)将 3d 世界坐标映射到 2d 图像坐标。 solvePnP 本质上返回一个变换(称为 T),使得 CTworld_coordinate = image_coordinate 尽其所能。您的相机矩阵由您的相机内在参数定义
    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2012-02-11
    • 2013-08-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多