OpenCV进行各种矩阵变换及变换参数求解

        OpenCV可以处理许多2D、3D的变换矩阵,包括但不局限于2D放射变换矩阵(2×3),二维点对的最优单映射变换矩阵H(3×3),四个二维点对之间的透射变换矩阵(3×3),多对三维点之间的旋转平移矩阵(3×4),计算多个点对之间的基矩阵和位姿变换矩阵等。这篇博客对这些变换函数进行了总结,可以通过该博客给出的名字搜索函数进行查询。

〇、仿射变换与透射变换

        仿射变换保证平行的直线在变换之后依然平行

        透射变换采用其次坐标,不保证原本平行的直线在变换之后依然平行

一、变换参数矩阵的求解

1. 计算三个二维点对之间的仿射变换矩阵:getAffineTransform()

2. 计算多个二维点对之间的最优放射变换矩阵(误差最小准则):estimateRigidTransform();或者findHomography();

3. 计算四个二维点对之间的透射变换:getPerspectiveTransform();

4. 计算多个三维点对之间的仿射变换:estimateAffine3D();

5. 计算多个点对之间的基矩阵:findFundamentalMat();

二、进行矩阵变换

1. 对输入图像进行仿射变换:warpAffine();

2. 对输入图像进行透射变换:perspectiveTransform();和warpPerspective();

3. 对输入二维点对进行仿射变换:transform(); 该函数还可用于色彩变换

4. 对输入三维点对进行透射变换:perspectiveTransform();

三、来自相机标定工具箱的函数

1. 估算物体位置和姿态:cvPOSIT();

2. 根据对应三维点恢复位置姿态,实现物体位置的二维坐标三维坐标之间的变换:solvePnP()和solvePnPRansac()

3. 合并两个旋转平移变换:composeRT()

4. 把点从欧式空间转换到齐次坐标:convertPointsToHomogeneous()

5. 把点从其次空间转换到欧式空间:convertPointsFromHomogeneous()

以上两个函数合并为:convertPointsHomogeneous()

6. 将矩阵分解:decomposeProjectionMatrix()

7. 检测棋盘格内角点的位置:findChessboardCorners()

8. 绘制检测出的棋盘格内的角点位置:drawChessboardCorners()

9. 得到圆圈光栅中圆斑的中心:findCirclesGrid()

10. 计算两幅图像关联点的基础矩阵:findFundamentalMat()

11. 计算其它图像对应的外极线:computeCorrespondEpilines()

12. 其它参考这篇博客

发表评论