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)

相关推荐
大闲在人3 分钟前
10. 配送中心卡车卸货流程分析:产能利用率与利特尔法则的实践应用
人工智能·供应链管理·智能制造·工业工程
woshikejiaih3 分钟前
**播客听书与有声书区别解析2026指南,适配不同场景的音频
大数据·人工智能·python·音视频
qq7422349846 分钟前
APS系统与OR-Tools完全指南:智能排产与优化算法实战解析
人工智能·算法·工业·aps·排程
兜兜转转了多少年8 分钟前
从脚本到系统:2026 年 AI 代理驱动的 Shell 自动化
运维·人工智能·自动化
LLWZAI11 分钟前
十分钟解决朱雀ai检测,AI率为0%
人工智能
无忧智库11 分钟前
某市“十五五“智慧气象防灾减灾精准预报系统建设方案深度解读 | 从“看天吃饭“到“知天而作“的数字化转型之路(WORD)
大数据·人工智能
方见华Richard11 分钟前
方见华个人履历|中英双语版
人工智能·经验分享·交互·原型模式·空间计算
凤希AI伴侣12 分钟前
凤希AI伴侣:一人成军的工具哲学与全模态内容实践-2026年2月7日
人工智能·凤希ai伴侣
Sagittarius_A*13 分钟前
特征检测:SIFT 与 SURF(尺度不变 / 加速稳健特征)【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉·surf·sift
FserSuN29 分钟前
2026年AI工程师指南
人工智能