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

news2024/11/17 9:38:09
  • 操作系统: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.coloradmin.cn/o/2066562.html

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

相关文章

信息流产品场景及数据指标体系

一、信息流产品的场景 我们分别从用户、内容生产者和平台的角度&#xff0c;描述他们在信息流产品里的消费场景&#xff0c;便于理解阐述的指标体系。 1、用户在信息流产品里的消费的场景 小明同学&#xff0c;每天打开 5 次 App&#xff0c;刷新内容 20 次&#xff0c;浏览了…

高性能、可扩展、支持二次开发的java版本企业电子招标采购系统源码

在数字化时代&#xff0c;企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台&#xff0c;涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…

苹果手机如何恢复微信好友?更新6个方法,快来收藏!

场景一&#xff1a;想查看某个好友的朋友圈&#xff0c;却不小心点击了删除好友。 场景二&#xff1a;与好友吵架了&#xff0c;一气之下删了好友&#xff0c;却不知如何重新恢复好友。 …… …… 除了上述的两种场景之外&#xff0c;我们可能还会因为其他的原因与好友失去微…

LLM - 从头开始实现 LLaMA3 的网络结构与推理流程 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/141462669 LLaMA3 是 Meta 的最新大语言模型&#xff0c;在整体网络设计进行多项升级&#xff0c;显著提升了模型的性能和效率&#xff0c;重要的…

AMEYA360:上海雷卯MOSFET器件参数:TJ、TA、TC到底讲啥?

近日&#xff0c;经常被问及MOSFET器件的参数计算问题。在本文中&#xff0c;AMEYA360将分享关于MOSFET中几个关键温度参数的计算方法&#xff1a;TJ(结温)、TA(环境温度)和TC(外壳温度)。 1. MOSFET温度参数的重要性 在电力电子应用中&#xff0c;温度是影响MOSFET性能和寿命的…

探索大型多模态智能代理的前沿进展

人工智能咨询培训老师叶梓 转载标明出处 在人工智能领域&#xff0c;代理被定义为能够感知环境并基于这些感知做出决策以实现特定目标的系统。尽管早期的代理在特定领域表现出了专业性&#xff0c;但它们通常缺乏适应性和泛化能力&#xff0c;现实世界的场景往往涉及超出文本的…

WinTune 系统基准测试:让你的电脑性能飞速提升

前言 你是否曾经为了等待电脑开机而焦急万分&#xff1f;是否因为系统卡顿而错过了重要的工作截止日期&#xff1f;是否渴望在繁忙的工作中找到一丝轻松&#xff0c;让加班成为过去式&#xff1f;如果你有这些烦恼&#xff0c;那么可以试试 WinTune 这款工具&#xff1b;它是一…

2024年电工(高级)证考试题库及电工(高级)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年电工&#xff08;高级&#xff09;证考试题库及电工&#xff08;高级&#xff09;试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#…

Python接口自动化测试详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、环境搭建 python unittest requests实现http请求的接口自动化Python的优势&#xff1a;语法简洁优美, 功能强大, 标准库跟第三方库灰常强大&#xff0c;建…

如何加密文档?电脑文件安全加密详细操作步骤(10种方法)

防患于未然&#xff0c;智者之举也。 文档与电脑文件的安全加密&#xff0c;正如古时城门深锁、密函暗藏&#xff0c;实为守护信息安全的智慧之举。 本文将引领您穿越古今&#xff0c;以十种详尽的方法&#xff0c;探讨如何在电脑上安全加密文档&#xff0c;确保您的信息固若金…

阿里云服务器的基本使用

1、购买云服务器 1. 注册阿里云账号&#xff0c;登录进去选择产品&#xff0c;阿里云目前有云服务器试用的政策&#xff0c;对于新手学习者&#xff0c;我们可以选择一个试用服务器 2. 选择服务器之后创建实例&#xff08;选择试用之后根据提示一步一步创建实例&#xff09;&…

关于shell输出颜色的事情

实例 # echo -e "\e[1;33;41m test content \e[0m"分析&#xff1a; 1、-e&#xff1a;转义起始符&#xff0c;等同于\033&#xff0c;表示定义一个转义序列 2、[&#xff1a;表示开始定义颜色 3、1;33;41&#xff1a;其中1表示高亮&#xff0c;33表示字体颜色为黄色…

ubuntu设置jupyter远程连接

一、配置远程连接 我是在unbuntu虚拟环境中操作的&#xff0c;&#xff08;要安装使用虚拟环境请看&#xff1a;ubuntu安装虚拟环境-CSDN博客&#xff09; step1&#xff1a;生成配置文件 jupyter notebook --generate-config 这样在~/.jupyter文件夹下就有 jupyter_noteboo…

AI绘画SD必学技能—从零开始训练你的专属Lora 模型!StableDiffusion模型训练保姆级教程建议收藏!

大家好&#xff0c;我是画画的小强 接触AI绘画的小伙伴&#xff0c;一定听过Lora。 Lora模型全称是&#xff1a;Low-Rank Adaptation of Large Language Models&#xff0c;可以理解为Stable-Diffusion中的一个插件&#xff0c;在生成图片时&#xff0c;Lora模型会与大模型结…

要做实施先做人

文/杨长春 作者简介&#xff1a;某IT公司项目总监&#xff0c;资深IT博主&#xff0c;专注于IT项目知识分享&#xff0c;著有《实战需求分析》、《软件需求分析实战》、《数字化管理软件实施》。 圣人曰&#xff0c;要做实施先做人。 作为一个软件项目的实施者&#xff0c;项目…

如何探索Sui DeFi生态

无论你是想进行tokens兑换、探索NFT世界&#xff0c;还是只是想借出资产以赚取奖励&#xff0c;Sui的DeFi生态都有适合你的内容。由于Sui原生的特性&#xff0c;这些apps能够应对DeFi中的常见挑战&#xff0c;例如通过DeepBook解决流动性问题。 一个健康的DeFi生态由几个关键应…

RFID光触发标签的特性、应用与传统RFID标签的差别

在当今数字化、智能化的时代浪潮中&#xff0c;RFID技术作为一种非接触式自动识别技术&#xff0c;已经在众多领域得到了广泛应用。而RFID光触发标签作为这一技术的创新发展&#xff0c;正以其独特的优势引领着行业的变革。 一、RFID光触发标签的特性 &#xff08;一&#xf…

GitHub配置SSH:一步步教你如何轻松连接远程仓库

GitHub配置SSH&#xff1a;一步步教你如何轻松连接远程仓库 优点&#xff1a;具体步骤1.检查本地SSH密钥2. 生成 ssh key3. 获取并保存公钥内容4.添加公钥到GitHub账户5.验证SSH设置是否成功 SSH工作原理 主页传送门&#xff1a;&#x1f4c0; 传送 优点&#xff1a; 提高安全…

Android13禁用Settings里面的Force Stop 強制停止按钮

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码修改 4.编译 5.彩蛋 1.前言 禁用Settings里面的 強制停止按钮,禁用下面这个按钮 2.问题分析 根据文本找到对应的位置 搜索 Force stop 或者 強制停止,结果 ./packages/apps/Settings/res/values/s…

领夹麦克风哪个品牌好?揭秘选购无线麦克风时的五大隐藏风险

随着短视频行业的兴起&#xff0c;几乎人人都会拍些视频分享日常&#xff0c;更有一些人成为了专职的短视频内容的创作者。其实无论是专业的或是非专业的&#xff0c;我们在拍摄过程中&#xff0c;都会使用到一些辅助工具&#xff0c;比如摄影支架、补光灯、麦克风等&#xff0…