OpenCV几何图像变换(10)透视变换函数warpPerspective()的使用

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

算法描述

warpPerspective 函数使用指定的矩阵对源图像进行透视变换:
dst ( x , y ) = src ( M 11 x + M 12 y + M 13 M 31 x + M 32 y + M 33 , M 21 x + M 22 y + M 23 M 31 x + M 32 y + M 33 ) \texttt{dst} (x,y) = \texttt{src} \left ( \frac{M_{11} x + M_{12} y + M_{13}}{M_{31} x + M_{32} y + M_{33}} , \frac{M_{21} x + M_{22} y + M_{23}}{M_{31} x + M_{32} y + M_{33}} \right ) dst(x,y)=src(M31x+M32y+M33M11x+M12y+M13,M31x+M32y+M33M21x+M22y+M23)
当设置了标志 WARP_INVERSE_MAP 时。否则,先使用 invert 函数对变换进行反转,然后将反转后的矩阵放入上述公式中代替 M。
该函数不能原地操作。

warpPerspective函数用于应用透视变换到图像上。透视变换是一种更为复杂的变换,它可以实现图像的倾斜和扭曲,通常用于模拟三维空间中的视角变化。透视变换需要一个3x3的变换矩阵,该矩阵可以由四对匹配的点(源图像中的四个点和目标图像中的四个点)计算得出。

函数原型

void cv::warpPerspective	
(InputArray 	src,OutputArray 	dst,InputArray 	M,Size 	dsize,int 	flags = INTER_LINEAR,int 	borderMode = BORDER_CONSTANT,const Scalar & 	borderValue = Scalar() 
)		

参数

  • 参数src 输入图像。
  • 参数dst 输出图像,它具有 dsize 的大小和与 src 相同的类型。
  • 参数M 3×3的变换矩阵。
  • 参数dsize 输出图像的大小。
  • 参数flags 插值方法的组合(INTER_LINEAR 或 INTER_NEAREST)和可选标志 WARP_INVERSE_MAP,该标志表示 M 是逆变换(dst→src)。
  • 参数borderMode 像素外推方法(BORDER_CONSTANT 或 BORDER_REPLICATE)。
  • 参数borderValue 在存在常数边界时所使用的值;默认情况下,它是 0。

代码示例

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main(int argc, char** argv)
{// 读取图像Mat image = imread("/media/dingxin/data/study/OpenCV/sources/images/fruit_small.jpg", IMREAD_COLOR);if (image.empty()) {std::cerr << "Error: Could not open or find the image." << std::endl;return -1;}// 定义源图像和目标图像的四个角点Point2f srcPoints[4] = {Point2f(0, 0), Point2f(image.cols - 1, 0), Point2f(image.cols - 1, image.rows - 1), Point2f(0, image.rows - 1)};Point2f dstPoints[4] = {Point2f(0, 0), Point2f(image.cols - 1, 0), Point2f(image.cols - 100, image.rows - 100), Point2f(100, image.rows - 100)};// 设置输出图像的大小Size dsize(image.cols, image.rows);// 计算透视变换矩阵Mat perspectiveMatrix = getPerspectiveTransform(srcPoints, dstPoints);// 创建输出图像Mat transformedImage;// 应用透视变换warpPerspective(image, transformedImage, perspectiveMatrix, dsize, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));// 显示结果namedWindow("Original Image", WINDOW_NORMAL);imshow("Original Image", image);namedWindow("Transformed Image", WINDOW_NORMAL);imshow("Transformed Image", transformedImage);waitKey(0);return 0;
}

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

必备工具:2024四大视频压缩神器推荐!

随着视频质量的不断提高&#xff0c;文件大小也变得越来越大&#xff0c;这给存储和分享带来了不小的挑战。今天&#xff0c;我们就来一起探索几款优秀的视频压缩工具&#xff01; 福昕视频压缩大师 直达链接&#xff1a;www.foxitsoftware.cn/shipinyasuo/ 福昕视频压缩大师…

两个月冲刺软考——SQL基础:排序、分组和聚合函数的实用指南

1.涉及到的部分基本语法 1.1 ORDER BY 与 GROUP BY ORDER BY用于对查询结果进行排序&#xff1b;默认是升序&#xff08;ASC&#xff09;&#xff0c;可以指定降序&#xff08;DESC&#xff09;。 GROUP BY用于将数据按照一个或多个列进行分组&#xff1b;通常与聚合函数&am…

长视频平台:谁都想成为「爆款制造机」

【潮汐商业评论/ 原创】 “今晚下班回家&#xff0c;我要先追优酷更新的《边水往事》&#xff0c;再补爱奇艺的《九部检察官》&#xff0c;还有腾讯视频新上线的脱口秀……”对于Chloe来说&#xff0c;没有什么比下班回家看剧更放松的。 “为了追这些剧&#xff0c;我最近把优…

苹果秋季发布会前瞻:iPhone 16领衔新品盛宴

苹果定档9月9日&#xff0c;揭开新品神秘面纱 苹果公司近日正式宣布&#xff0c;将于9月9日在加州库比蒂诺的Apple Park&#xff0c;史蒂夫乔布斯剧院举办年度秋季新品发布会&#xff0c;主题为“It’s Glowtime”&#xff0c;预示着Siri界面将迎来一场华丽变身。此次发布会较原…

米壳AI:发现一个可以保存国内外视频的宝藏网站!

&#x1f388;嘿&#xff0c;朋友们&#xff01;今天我要给大家分享一个超级棒的发现 —— 一个可以下载国内外视频的网站&#xff01;&#x1f389; 在这个信息爆炸的时代&#xff0c;我们总是渴望能够随时随地欣赏到精彩的视频内容。 无论是国内的热门影视剧、搞笑短视频&am…

Docmatix - 超大文档视觉问答数据集

本文&#xff0c;我们将发布Docmatix - 一个超大的文档视觉问答 (DocVQA) 数据集&#xff0c;比之前的数据集大 100 倍。当使用 Docmatix 微调 Florence-2 时&#xff0c;消融实验显示 DocVQA 任务的性能提高了 20%。 Docmatix - 一个超大的文档视觉问答 (DocVQA) 数据集https:…

虚幻5|按键触发学习

一&#xff0c;如图参考 1.下移 驱动阈值 越大按时间长才会触发&#xff0c;越小很快就可以触发 2.按下 当按下超出驱动阈值大小就会触发一次&#xff0c;这里的驱动阈值只能设置再0.1~1的大小 3.已松开 当按下的时候&#xff0c;先触发单次的started&#xff0c;如果按压…

#QT 笔记一

重点&#xff1a;面试考试大概率涉及&#xff0c;需要不借助任何资料掌握。掌握&#xff1a;面试考试可能涉及&#xff0c;需要不借助任何资料掌握。熟悉&#xff1a;面试考试可能涉及&#xff0c;可以稍微参考资料掌握。了解&#xff1a;面试考试小概率涉及&#xff0c;面试拔…

智能优化特征选择|基于鹦鹉优化(2024年新出优化算法)的特征选择(分类器选用的是KNN)研究Matlab程序 【优化算法可以替换成其他优化方法】

智能优化特征选择|基于鹦鹉优化&#xff08;2024年新出优化算法&#xff09;的特征选择&#xff08;分类器选用的是KNN&#xff09;研究Matlab程序 【优化算法可以替换成其他优化方法】 文章目录 一、PO基本原理PO基本原理基本流程示例应用 二、实验结果三、核心代码四、代码获…

某张卡NR only下可以驻网 AUTO模式下在2G/3G工作

结论:需要终端设置为data centric&#xff0c;或ps only。 从日志看&#xff0c;5G下的注册收到REGISTRATION ACCEPT。但是没有携带ims support。 正常网络&#xff1a; ims_Vops_3GPP 1 (0x1) nwk_feature_supp_inc 1 (0x1)nwk_feature_supportedlength 2 (0x2)mpsi 0 (0…

【HarmonyOS NEXT开发】鸿蒙开发环境准备,ArkTS基础语法入门

文章目录 鸿蒙开发环境准备&#xff0c;ArkTS基础语法入门大纲简介DevEco Studio简介运行环境要求 安装与配置开发工具下载Harmony OS 和 OpenHarmony 的区别Previewer汉化插件的配置 ArkTS基础快速入门1. 解释说明2. 变量与常量3. 变量命名规则4. 数组5. 函数定义函数调用函数…

Win10 安装 Rabbitmq

参考文档&#xff1a;https://www.rabbitmq.com/docs/install-windows 一、安装 Erlang 语言 安装 RabbitMQ 需要该语言的支持才能安装 下载地址&#xff1a;https://erlang.org/download/otp_versions_tree.html 点击这里下载最新版本&#xff1a;27.0.1 直接默认 next 更…

2d像素游戏基本架构

目录 2D像素游戏的基本架构通常包括以下几个关键部分 Unity和虚幻引擎在2D游戏开发中的性能比较 Unity的2D工具设计复杂的地图和场景 创建和管理地图资源&#xff1a; 使用TileMap工具&#xff1a; 构建复杂场景&#xff1a; 添加碰撞体和物理效果&#xff1a; 优化和…

Android settings命令讲解和实战

1&#xff0c;简介 在Android系统中&#xff0c;settings命令用于管理设备设置。这些命令可以与Settings提供者&#xff08;Settings provider&#xff09;交互&#xff0c;后者是一个用于存储和检索系统设置的系统服务。Settings provider在Android系统中可以被看作是一个特殊…

携程:从MySQL迁移OceanBase的数据库发布系统实践

作者简介&#xff1a;杨晓军 现就职于携程的数据库团队&#xff0c;主要负责携程数据库的研发与管理&#xff0c;专注于提升数据库的稳定性。 自分布式关系型数据库OceanBase开源以来&#xff0c;携程已经在线上环境中进行了广泛的应用&#xff0c;取代了原先以MySQL为主力的业…

组件通信 Vue3

1.props 1.child <template><div class"child"><h3>子组件</h3><h4>玩具&#xff1a;{{ toy }}</h4><h4>父给的车&#xff1a;{{ car }}</h4><button click"sendToy(toy)">把玩具给父亲</butt…

通过visual studio进行dump文件调试和分析

0、前言 很多时候程序crash之后需要分析原因。对于C/C程序&#xff0c;一般最常见的场景和方法就是根据dump文件进行分析。 1、分析的前提条件 进行dump文件分析&#xff0c;需要以下文件&#xff1a; 进程crash时产生的dump文件程序源码进程对应的程序exe文件编译exe文件时产…

【赵渝强老师】MongoDB的存储引擎

存储引擎&#xff08;Storage Engine&#xff09;是MongoDB的核心组件&#xff0c;它负责管理数据如何存储在硬盘&#xff08;Disk&#xff09;和内存&#xff08;Memory&#xff09;上。从MongoDB 3.2 版本开始&#xff0c;MongoDB支持多种类型的数据存储引擎。 视频讲解如下&…

使用twilio向手机发短信做监控报警

最近遇到个需求&#xff0c;就是夜班HW希望有个监控系统指标&#xff0c;如果异常就向监控人手机打电话的需求。在考察以后&#xff0c;发现目前由于国内防电信诈骗的原因&#xff0c;所以想要使用云通讯功能必须由企业去申请&#xff0c;但作为一个个人的监控项目来说太大了。…

Python | Leetcode Python题解之第384题打乱数组

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, nums: List[int]):self.nums numsself.original nums.copy()def reset(self) -> List[int]:self.nums self.original.copy()return self.numsdef shuffle(self) -> List[int]:for i in range(l…