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)

相关推荐
胡耀超5 分钟前
标签体系设计与管理:从理论基础到智能化实践的综合指南
人工智能·python·深度学习·数据挖掘·大模型·用户画像·语义分析
开-悟9 分钟前
嵌入式编程-使用AI查找BUG的启发
c语言·人工智能·嵌入式硬件·bug
大咖分享课29 分钟前
开源模型与商用模型协同开发机制设计
人工智能·开源·ai模型
你不知道我是谁?38 分钟前
AI 应用于进攻性安全
人工智能·安全
reddingtons1 小时前
Adobe高阶技巧与设计师创意思维的进阶指南
人工智能·adobe·illustrator·设计师·photoshop·创意设计·aftereffects
机器之心1 小时前
刚刚,Grok4跑分曝光:「人类最后考试」拿下45%,是Gemini 2.5两倍,但网友不信
人工智能
蹦蹦跳跳真可爱5891 小时前
Python----大模型(使用api接口调用大模型)
人工智能·python·microsoft·语言模型
小爷毛毛_卓寿杰1 小时前
突破政务文档理解瓶颈:基于多模态大模型的智能解析系统详解
人工智能·llm
Mr.Winter`1 小时前
障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
人工智能·机器人·自动驾驶·ros·具身智能·环境感知
好开心啊没烦恼2 小时前
Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy·pandas