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

devtools/2024/9/23 14:29:37/
  • 操作系统: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} tixitiyiti =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


Mat cv::getPerspectiveTransform
(InputArray 	src,InputArray 	dst,int 	solveMethod = DECOMP_LU 
)		

函数参数1

  • 参数src 源图像中四边形顶点的坐标。
  • 参数dst 目标图像中对应四边形顶点的坐标。
  • 参数solveMethod 传递给 cv::solve 函数的方法(DecompTypes 类型)。

函数原型2


Mat cv::getPerspectiveTransform
(const Point2f 	src[],const Point2f 	dst[],int 	solveMethod = DECOMP_LU 
)	

函数参数2

  • 参数src 源图像中四边形顶点的坐标。
  • 参数dst 目标图像中对应四边形顶点的坐标。
  • 参数solveMethod 传递给 cv::solve 函数的方法(DecompTypes 类型)。

示例代码

#include <opencv2/opencv.hpp>
#include <iostream>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;
}

运行结果

在这里插入图片描述


http://www.ppmy.cn/devtools/100189.html

相关文章

创建新进程,system函数及其底层逻辑

创建新进程 exec函数 与fork不同&#xff0c;exec函数不是创建调用进程的子进程&#xff0c;而是创建一个新的进程取代调用进程自身。新进程会用自己的全部地址空间&#xff0c;覆盖调用进程的地址空间但进程的PID保持不变 exec不是一个函数而是一堆函数(共6个)&#…

windows C++-WRL 处理事件

本文档演示如何使用 Windows 运行时 C 模板库 (WRL) 订阅和处理 Windows 运行时对象的事件。 订阅处理事件流程 以下步骤启动对象 ABI::Windows::System::Threading::IDeviceWatcher&#xff0c;并使用事件处理程序监视进度。 通过接口 IDeviceWatcher&#xff0c;可以在添加…

C++ | 继承

前言 本篇博客讲解c中的继承 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&…

[JAVA]什么是泛型?泛型在Java中的应用

目录 1.初识泛型的应用 2.创建自定义泛型类 3.利用较小范围的泛型方法定义 4.了解泛型通配符&#xff0c;什么是泛型通配符&#xff1f; 1.初识泛型的应用 —所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。 —定…

华为数通方向HCIP-DataCom H12-821题库(更新单选真题:1-10)

第1题 1、下面是一台路由器的部分配置,关于该配置描述正确的是? [HUAWEllact number 2001 [HUAWEl-acl-basic-2001]rule 0 permit source 1.1.1.1 0 [HUAWEl-acl-basic-2001]rule 1 deny source 1.1.1.0 0 [HUAWEl-acl-basic-2001]rule

SSRF漏洞复现

目录 web-ssrfme ssrf攻击本地fastcgi漏洞复现 web-ssrfme 该漏洞需要部署在Linux下&#xff0c;拉取docker 映射到8091端口上&#xff0c;直接访问靶场ip的8091端口 进入题目&#xff0c;直接把源码给了&#xff0c;那我们分析源码&#xff0c;源码过滤了file协议、dict协…

微前端架构下的性能优化:模块化开发与服务网格的协同

摘要 在微前端架构中&#xff0c;模块化开发允许团队独立工作&#xff0c;而服务网格提供了微服务间的通信和管理。本文将探讨如何将模块化开发与服务网格结合&#xff0c;以实现前端应用的性能优化。 引言 微前端架构通过将大型前端应用拆分成小型、独立的模块&#xff0c;…

NetSuite 2024.2 学习笔记

NetSuite一年两次的发版&#xff0c;每次都会带来一些新的东西。这对于顾问来说&#xff0c;应该成为必修课。 每个版本发版内容的学习时长&#xff0c;大约在20小时左右。包括&#xff1a; •Release Notes通读 •Release Preview环境申请 •热点功能验证 •New Release学习笔…