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. 其它参考这篇博客