当前位置: 首页 > news >正文

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} 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;
}

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Nginx源码安装与进阶负载均衡
  • SSH 隧道方式连接 MySQL 服务器
  • 元数据管理gravitino学习
  • C++笔记---类和对象(下)
  • css高级
  • Unity求向量和平面的交点
  • leetcode 括号类型题解
  • 常见分布式ID解决方案的优缺点
  • 什么是多组学整合
  • 数据采集-->kafka-->hdfs
  • web服务器相关知识
  • windows本地kafka和zookeeper单机版
  • 【Linux】系列入门摘抄笔记-8-权限管理chmod/chown
  • 【排序篇】插入排序与选择排序
  • LabVIEW优化内存使用
  • 【Linux系统编程】快速查找errno错误码信息
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 5、React组件事件详解
  • Android Volley源码解析
  • C学习-枚举(九)
  • emacs初体验
  • FastReport在线报表设计器工作原理
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • javascript 总结(常用工具类的封装)
  • Java精华积累:初学者都应该搞懂的问题
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • python学习笔记-类对象的信息
  • react 代码优化(一) ——事件处理
  • Sass 快速入门教程
  • Terraform入门 - 1. 安装Terraform
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vim Clutch | 面向脚踏板编程……
  • Vultr 教程目录
  • Web Storage相关
  • 理解在java “”i=i++;”所发生的事情
  • 前端技术周刊 2019-02-11 Serverless
  • 入手阿里云新服务器的部署NODE
  • 数据可视化之 Sankey 桑基图的实现
  • 原生Ajax
  • Spring第一个helloWorld
  • ###STL(标准模板库)
  • #1015 : KMP算法
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)虚拟机的安装与使用,linux系统安装
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (九)c52学习之旅-定时器
  • (九)信息融合方式简介
  • (六)Hibernate的二级缓存
  • (三)终结任务
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在