OpenCV几何图像变换(3)计算透视变换矩阵函数getPerspectiveTransform()的使用

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

算法描述

计算四对对应点之间的透视变换。

该函数计算 3×3 的透视变换矩阵,使得:

t i x i ′ t i y i ′ t i \] = map_matrix ⋅ \[ x i y i 1 \] \\begin{bmatrix} t_i x'_i \\\\ t_i y'_i \\\\ t_i \\end{bmatrix} = \\texttt{map\\_matrix} \\cdot \\begin{bmatrix} x_i \\\\ y_i \\\\ 1 \\end{bmatrix} tixi′tiyi′ti =map_matrix⋅ xiyi1 其中, d s t ( i ) = ( x i ′ , y i ′ ) , s r c ( i ) = ( x i , y i ) , i = 0 , 1 , 2 , 3 dst(i)=(x'_i,y'_i), src(i)=(x_i, y_i), i=0,1,2,3 dst(i)=(xi′,yi′),src(i)=(xi,yi),i=0,1,2,3 getPerspectiveTransform() 函数用于计算一个 3×3 的透视变换矩阵,该矩阵将源图像中的四边形映射到目标图像中的另一个四边形。这种变换可以实现图像的透视校正,例如将倾斜的图像拉直或调整视角。 ### 函数原型1 ```cpp Mat cv::getPerspectiveTransform ( InputArray src, InputArray dst, int solveMethod = DECOMP_LU ) ``` ### 函数参数1 * 参数src 源图像中四边形顶点的坐标。 * 参数dst 目标图像中对应四边形顶点的坐标。 * 参数solveMethod 传递给 cv::solve 函数的方法(DecompTypes 类型)。 ### 函数原型2 ```cpp Mat cv::getPerspectiveTransform ( const Point2f src[], const Point2f dst[], int solveMethod = DECOMP_LU ) ``` ### 函数参数2 * 参数src 源图像中四边形顶点的坐标。 * 参数dst 目标图像中对应四边形顶点的坐标。 * 参数solveMethod 传递给 cv::solve 函数的方法(DecompTypes 类型)。 ### 示例代码 ```cpp #include #include using namespace cv; using namespace std; int main() { // 加载图像 Mat src = imread("/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg"); if (src.empty()) { cout << "Error: Image not found." << endl; return -1; } // 定义源图像中的四个点 Point2f srcQuad[4] = {Point2f(0, 0), Point2f(src.cols - 1, 0), Point2f(src.cols - 1, src.rows - 1), Point2f(0, src.rows - 1)}; // 定义目标图像中的四个点 Point2f dstQuad[4] = {Point2f(0, 0), Point2f(src.cols * 0.5, 0), Point2f(src.cols * 0.5, src.rows), Point2f(0, src.rows)}; // 获取透视变换矩阵 Mat perspMat = getPerspectiveTransform(srcQuad, dstQuad); // 应用透视变换 Mat warpedImage; warpPerspective(src, warpedImage, perspMat, src.size()); // 显示原图像和变换后的图像 namedWindow("Original Image", WINDOW_NORMAL); imshow("Original Image", src); namedWindow("Warped Image", WINDOW_NORMAL); imshow("Warped Image", warpedImage); // 等待按键并关闭窗口 waitKey(0); destroyAllWindows(); return 0; } ``` ### 运行结果 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b84a784a2e7d4b5dbd8ad41280c67436.png)

相关推荐
5Gcamera12 小时前
4G body camera BC310/BC310D user manual
人工智能·边缘计算·智能安全帽·执法记录仪·smarteye
爱喝可乐的老王13 小时前
机器学习中常用交叉验证总结
人工智能·机器学习
公链开发14 小时前
2026 Web3机构级风口:RWA Tokenization + ZK隐私系统定制开发全解析
人工智能·web3·区块链
wyw000014 小时前
目标检测之YOLO
人工智能·yolo·目标检测
发哥来了14 小时前
AI视频生成企业级方案选型指南:2025年核心能力与成本维度深度对比
大数据·人工智能
_codemonster14 小时前
强化学习入门到实战系列(四)马尔科夫决策过程
人工智能
北邮刘老师14 小时前
智能体治理:人工智能时代信息化系统的全新挑战与课题
大数据·人工智能·算法·机器学习·智能体互联网
laplace012314 小时前
第七章 构建自己的agent智能体框架
网络·人工智能·microsoft·agent
诗词在线14 小时前
中国古代诗词名句按主题分类有哪些?(爱国 / 思乡 / 送别)
人工智能·python·分类·数据挖掘
高锰酸钾_14 小时前
机器学习-L1正则化和L2正则化解决过拟合问题
人工智能·python·机器学习