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

opencv-25 图像几何变换04- 透视 cv2.warpPerspective()

什么是透视?

透视是一种几何学概念,用于描述在三维空间中观察物体时,由于视角的不同而产生的变形效果。在现实世界中,当我们从不同的角度或位置观察物体时,它们会呈现出不同的形状和大小。这种现象被称为透视效果。

透视效果主要由以下几个因素造成:

远近关系:在视野范围内,离我们更远的物体看起来较小,而离我们更近的物体看起来较大。这是因为我们在观察时,远处的物体在视平面上的投影较小。

平行线收敛:在透视效果下,远离观察者的平行线在视觉上会似乎收敛到一个点,被称为消失点。这使得在远处的物体线条会看起来更加趋向于一点。

视角变化:观察物体的视角改变,物体的形状和大小也会发生变化。例如,当我们倾斜或移动头部时,看到的物体会有不同的形态。

透视效果在绘画、摄影、计算机图形学等领域都起着重要的作用。在绘画中,艺术家通常使用透视来创造真实感和深度感。在摄影中,摄影师可以利用透视来拍摄令人惊叹的远景和近景照片。在计算机图形学中,透视是渲染真实感图像的重要技术之一。

在图像处理中,透视变换是一种将图像投影到一个新的视角或平面的方法,以实现校正透视畸变、改变图像视角等目的。通过透视变换,可以将图像中的内容按照一定的规则进行调整,从而达到所需的效果。

opencv 透视的应用场景

OpenCV中透视变换的应用场景非常广泛,它可以在许多不同的领域和任务中发挥重要作用。以下是一些使用OpenCV透视变换的常见应用场景:

  1. 图像校正与纠正:
    透视变换可以用于校正图像中的透视畸变,例如摄像头拍摄的倾斜建筑物或文档图像。通过找到正确的透视变换矩阵,可以将图像变换为在平面上正常显示的形式。
  2. 图像拼接与全景图像:
    在全景图像拼接中,透视变换用于将多个图像对齐并拼接成一个更大的全景图像。通过透视变换,可以校正相机的视角,以便拼接后的图像具有连贯的视觉效果。
  3. 车道线检测与车道保持:
    在自动驾驶或驾驶辅助系统中,透视变换可用于检测车道线并保持车辆在车道中心行驶。通过将图像转换为鸟瞰视角,车道线在图像中将呈现为直线,便于车道线检测算法的实现。
  4. 物体检测与识别:
    在计算机视觉中,透视变换可以用于改变图像的视角,从而便于对物体进行检测和识别。例如,通过将图像转换为俯视视角,可以更容易地检测和跟踪行人或车辆。
  5. 视频稳定与追踪:
    在视频稳定和目标追踪中,透视变换可用于稳定视频或将目标区域转换到固定视角,以便进行更稳健的跟踪。
  6. 增强现实 (AR) 应用:
    在AR应用中,透视变换可以用于将虚拟对象与真实世界中的物体进行融合,从而实现更真实的增强现实体验。
  7. 文档扫描与识别:
    在文档扫描与识别应用中,透视变换可用于校正文档图像中的透视畸变,从而确保文本和图像的水平和垂直对齐。

这些只是OpenCV透视变换的一些常见应用场景,实际上,透视变换在计算机视觉和图像处理中有着广泛的应用,帮助我们解决各种复杂的视觉任务。

透视变换通过函数 cv2.warpPerspective()实现,该函数的语法是:

dst = cv2.warpPerspective( src, M, dsize[, flags[, borderMode[, borderValue]]] )

式中:
 dst 代表透视处理后的输出图像,该图像和原始图像具有相同的类型。dsize 决定输出图
像的实际大小。
 src 代表要透视的图像。
 M 代表一个 3×3 的变换矩阵。
 dsize 代表输出图像的尺寸大小。
 flags 代表插值方法,默认为 INTER_LINEAR。当该值为 WARP_INVERSE_MAP 时,

意味着 M 是逆变换类型,能实现从目标图像 dst 到原始图像 src 的逆变换。具体可选值
参见表 5-1。
 borderMode 代表边类型, 默认为 BORDER_CONSTANT 。 当 该值为 BORDER_
TRANSPARENT 时,意味着目标图像内的值不做改变,这些值对应原始图像内的异常值。

borderValue 代表边界值,默认是 0。
与仿射变换一样,同样可以使用一个函数来生成函数 cv2.warpPerspective()所使用的转换矩阵。

该函数是 cv2.getPerspectiveTransform(),其语法格式为:

retval = cv2.getPerspectiveTransform( src, dst )

式中:
 src 代表输入图像的四个顶点的坐标。
 dst 代表输出图像的四个顶点的坐标。

需要注意的是, src 参数和 dst 参数是包含四个点的数组,与仿射变换函数 cv2.getAffineTransform() 中的三个点是不同的。实际使用中,我们可以根据需要控制 src 中的四
个点映射到 dst 中的四个点。

实验:完成图像透视

import cv2
import numpy as np
img=cv2.imread('demo.bmp')
rows,cols=img.shape[:2]
print(rows,cols)
pts1 = np.float32([[150,50],[400,50],[60,450],[310,450]])
pts2 = np.float32([[50,50],[rows-50,50],[50,cols-50],[rows-50,cols-50]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(cols,rows))
cv2.imshow("img",img)
cv2.imshow("dst",dst)
cv2.waitKey()
cv2.destroyAllWindows()

指定原始图像中平行四边形的四个顶点 pts1,指定目标图像中矩形的四个顶点
pts2,使用 M=cv2.getPerspectiveTransform(pts1,pts2)生成转换矩阵 M。接下来,使用语句
dst=cv2.warpPerspective(img,M,(cols,rows))完成从平行四边形到矩形的转换。

运行效果:

在这里插入图片描述

实验原图:

在这里插入图片描述

相关文章:

opencv-25 图像几何变换04- 透视 cv2.warpPerspective()

什么是透视? 透视是一种几何学概念,用于描述在三维空间中观察物体时,由于视角的不同而产生的变形效果。在现实世界中,当我们从不同的角度或位置观察物体时,它们会呈现出不同的形状和大小。这种现象被称为透视效果。 透…...

视频讲解Codeforces Round 887 (Div. 2)(A--C)

文章目录 A. Desorting1、板书2、代码 B. Fibonaccharsis1、板书2、代码 C. Ntarsis Set1、板书2、代码 视频讲解Codeforces Round 887 (Div. 2)&#xff08;A–C&#xff09; A. Desorting 1、板书 2、代码 #include<bits/stdc.h> #define endl \n #define INF 0x3f…...

【团队协作开发】将Gitee项目导入到本地IDEA中出现根目录不完整的问题解决(已解决)

前言&#xff1a;在团队协作开发过程中&#xff0c;通常我们的Gitee完整项目中会包含很多内容&#xff1a;后端代码、前端代码、项目结构图、项目文档等一系列资产。 将Gitee项目导入到本地IDEA中&#xff0c;通常会出现根目录不完整的问题。这是因为项目里面包含了后端代码、前…...

vue-pdf 单列显示多个pdf页面

<template><div><pdfv-for"i in numPages":key"i":src"src":page"i"style"display: inline-block; width: 100%"></pdf> <!-- 宽度设置100% 一行只展示一页 --></div> </template&g…...

2023年FPGA好就业吗?

FPGA岗位有哪些&#xff1f; 从芯片设计流程来看&#xff0c;FPGA岗位可以分四类 产品开发期&#xff1a;FPGA系统架构师 芯片设计期&#xff1a;数字IC设计工程师、FPGA开发工程师 芯片流片期&#xff1a;FPGA验证工程师 产品维护期&#xff1a;FAE工程师 从行业上来说&#x…...

【业务功能篇52】Springboot+mybatis mysql开启批量执行sql参数 allowMultiQueries=true

allowMultiQueriestrue参数的作用&#xff1a; 可以在sql语句后携带分号&#xff0c;实现多语句执行。可以执行批处理&#xff0c;同时发出多个SQL语句。 在application-xxx.xml配置文件中&#xff0c;配置数据库的信息 spring:datasource:dynamic:primary: mysqldb # 默认数…...

StableDiffusion 换脸实现

先看效果&#xff1a; 想要换的脸&#xff1a; 想要把脸放到的目标图片&#xff1a; 实现方案&#xff1a; StableDiffusionroop&#xff08;本次实验基于roopV0.02版本&#xff09; 1/安装SD&#xff0c;模型选择 DreamShaper,Sampler使用 Euler a 2/安装roop插件 roop插…...

直播平台源码开发提高直播质量的关键:视频编码和解码技术

在互联网日益发展的今天&#xff0c;直播平台成为人们互联网生活的主力军&#xff0c;直播平台功能的多样化与智能化使我们的生活有了极大地改变&#xff0c;比如短视频功能&#xff0c;它让我们既可以随时随地去发布自己所拍摄到的东西让世界各地的用户看到&#xff0c;也能让…...

如何使用 PHP 更新数据到数据库?

首先&#xff0c;你需要有个数据库&#xff0c;对吧&#xff1f;如果你还没有的话&#xff0c;可以用PHP的MySQL扩展来创建一个。不过&#xff0c;在此之前&#xff0c;你需要确保你的服务器已经安装了MySQL&#xff0c;并且你的PHP环境已经支持MySQL扩展。 好了&#xff0c;现…...

NLP masked_tokens[]、token_masks[]是什么?

1、masked_tokens[]、token_masks[]介绍 masked_tokens和token_masks两个列表用于存储mask处理后的token&#xff08;分词&#xff09;结果和对应的mask标志。 masked_tokens列表存储经过mask处理后的分词结果。 token_masks列表存储与每个分词结果对应的mask标志。 2、示例…...

aoa_android工程编译注意事项

1. android studio 版本 &#xff1a; 3.0.0 Android Studio 下载文件归档 | Android 开发者 | Android Developers (google.cn) 下载地址&#xff1a; https://redirector.gvt1.com/edgedl/android/studio/install/3.0.0.18/android-studio-ide-171.4408382-windows.ex…...

java篇 类的进阶0x06:可见性修饰符(访问修饰符)

文章目录 可见性修饰符&#xff08;访问修饰符&#xff09;成员变量都应该是 private构造方法可以是 private 的public 修饰的东西尽量不要改动非 public 的类&#xff0c;类名可以不和文件名相同protected 继承专属的访问控制 可见性修饰符&#xff08;访问修饰符&#xff09;…...

Java 贪心算法经典问题解决

文章目录 分金条题目思路代码实现测试用例以及结果输出 花费资金做项目最大收益题目思路代码实现测试用例以及结果输出 预定会议室题目思路代码实现测试用例以及结果输出 取中位数题目思路代码实现测试用例以及结果输出 最低字典序题目思路代码实现测试用例以及结果输出 结语 分…...

所有docker命令无效,解决办法

目录 ■前言 今天使用docker时&#xff0c;所有命令无效 ■解决办法如下 1.停止docker服务 2.查看状态 3.删除之前的docker相关的文件 4.再次查看状态 5.使用相关命令 &#xff08;好用了&#xff09; 6.重新下载镜像 ■前言 今天使用docker时&#xff0c;所有命令无…...

系列一、创建者模式

一、概述 创建者模式的主要关注点是"怎样创建对象?"&#xff0c;它的主要特点是"将对象的创建与使用分离"。这样可以降低系统的耦合度&#xff0c;使用者不需要关注对象的创建细节。 二、分类 单例模式工厂方法模式抽象工厂模式原型模式建造者模式...

数据库系列:覆盖索引和规避回表

1 介绍 在MySQL数据库查询过程中&#xff0c;索引覆盖和避免不必要的回表&#xff0c;是减少检索步骤&#xff0c;提高执行效率的有效手段。下面从这两个角度分析如何进行MySQL检索提效。 2 数据准备 模拟一个500w数据容量的部门表 emp&#xff0c;表结构如下&#xff0c;并…...

java Spring Boot上线运维 启动jar时控制台调整零时变量

前面的文章 java 打包Spring Boot项目&#xff0c;并运行在windows系统中和将Spring Boot项目打包部署到阿里云linux服务器讲述了Spring Boot项目打包部署的过程 但是 这里 我们可能会遇到一种情况 此时 我们服务器 java项目占用了 80端口 但我们需要放上去一个更重要的东西&am…...

java后端校验

Java 后端数据校验 一、概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数&#xff0c;写了一大堆的 if else 进行校验&#xff0c;…...

PowerPoint如何修改“默认保存路径”?

很多时候&#xff0c;我们做好PPT后都要保存&#xff0c;一般会保存在创建PPT的文件夹里&#xff0c;或者另外设置保存的路径。 如果经常需要制作PPT&#xff0c;又不想每次都要重新选择保存位置&#xff0c;我们可以创建或修改“默认保存路径”&#xff0c;这样每次关闭PPT后…...

【PMP】有没有项目经理能看得懂这九张图?求挑战

这九张图&#xff0c;全是圈圈我的肺腑之言啊&#xff01;谁痛谁知道&#xff01; 做技术时&#xff0c;就想着30岁就转管理&#xff0c;管理岗位赚得多&#xff0c;结果发现全是烟雾弹。 做技术和代码打交道&#xff0c;做管理跟人打交道。天天开不完的会、说不完的话&#xf…...

3大核心策略!Langchain-Chatchat RAG语义匹配效率提升实战指南

3大核心策略&#xff01;Langchain-Chatchat RAG语义匹配效率提升实战指南 【免费下载链接】Langchain-Chatchat Langchain-Chatchat&#xff08;原Langchain-ChatGLM&#xff09;基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用 | Langchain-Chatch…...

Phi-4-reasoning-vision-15B实操手册:强约束提示词设计与错误行为规避

Phi-4-reasoning-vision-15B实操手册&#xff1a;强约束提示词设计与错误行为规避 1. 引言&#xff1a;当视觉模型“自作主张”时&#xff0c;我们该怎么办&#xff1f; 你上传了一张软件界面的截图&#xff0c;想问问某个按钮是干什么用的。结果模型没回答你的问题&#xff…...

Qwen3-VL-8B-Instruct-GGUF实战:上传图片秒懂内容,智能问答体验分享

Qwen3-VL-8B-Instruct-GGUF实战&#xff1a;上传图片秒懂内容&#xff0c;智能问答体验分享 1. 模型概述与核心优势 Qwen3-VL-8B-Instruct-GGUF是阿里通义最新推出的中量级多模态模型&#xff0c;它最大的特点可以用一句话概括&#xff1a;用8B参数实现72B级别的视觉语言理解…...

nli-distilroberta-baseAI应用:作为LLM输出后处理模块过滤逻辑矛盾回答

NLI DistilRoBERTa Base AI应用&#xff1a;作为LLM输出后处理模块过滤逻辑矛盾回答 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于判断两个句子之间的逻辑关系。这个轻量级但强大的工具可以帮助开发者解决…...

蓝桥杯备赛:Day5-P1036 选数

&#x1f4da; 算法笔记&#xff1a;P1036 [NOIP 2002 普及组] 选数 1. 题目描述 [P1036 NOIP 2002 普及组] 选数 - 洛谷 从 nnn 个整数中任选 kkk 个数相加&#xff0c;统计有多少种选法的和为质数。 数据范围&#xff1a;n≤20,k<nn \le 20, k < nn≤20,k<n&…...

零代码实战:用OpenClaw和Qwen3.5-9B-AWQ-4bit制作表情包生成器

零代码实战&#xff1a;用OpenClaw和Qwen3.5-9B-AWQ-4bit制作表情包生成器 1. 为什么需要本地化表情包生成工具 作为一个长期混迹技术社区的老鸟&#xff0c;我经常需要在群聊中快速制作贴合讨论主题的表情包。传统方式要么依赖在线生成器&#xff08;存在隐私风险&#xff0…...

终极GRUB配置指南:让build-linux系统成功启动的7个关键步骤

终极GRUB配置指南&#xff1a;让build-linux系统成功启动的7个关键步骤 【免费下载链接】build-linux A short tutorial about building Linux based operating systems. 项目地址: https://gitcode.com/gh_mirrors/bu/build-linux build-linux项目是一个构建Linux操作系…...

Interactive-Deep-Colorization未来发展方向:从学术研究到商业应用的完整指南

Interactive-Deep-Colorization未来发展方向&#xff1a;从学术研究到商业应用的完整指南 【免费下载链接】interactive-deep-colorization Deep learning software for colorizing black and white images with a few clicks. 项目地址: https://gitcode.com/gh_mirrors/in/…...

Kafka消费者数据质量与治理:构建可信数据管道的最佳实践

摘要 在实时数据驱动的企业架构中&#xff0c;Apache Kafka已成为流式数据骨干的核心组件。然而&#xff0c;随着数据规模的指数级增长和数据消费者的多样化&#xff0c;如何确保Kafka管道中的数据质量与治理有效性&#xff0c;成为数据平台团队面临的核心挑战。本文从Kafka消…...

Python数据处理实战:列表推导式+time库+DataFrame+groupby详细代码注释

&#x1f6a2; 船长Talk | 每天一篇数据分析干货 关注公众号「船长Talk」&#xff0c;获取更多 Python / 数据分析 / SQL 实战技巧&#xff0c;附完整注释代码。 每篇文章都有详细代码注释&#xff0c;学了就能用。Python 数据处理实战&#xff1a;列表推导式 time库 DataFra…...