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

opencv-图像透视变换

透射变换是视角变化的结果,是指利用透视中心,像点,目标点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴旋转某一角度,破坏原有的投影光束,仍能保持承影面上投影几何图形不变的变化)

它的本质将图像投影到一个新的视平面,其通用变换公式为 

其中,(u,v)是原始图像像素坐标,w取值为1,(x=x'/z',y=y'/z')是透射变换后的结果。后面的矩阵称为透视变换矩阵,一般情况下我们将其分为三部分,如下图

 

T1(a00,a01,a10,a11)表示对图像进行线性代换,T2(a02,a12)对图像进行平移,T3对图像进行透射变换,a22一般设为1 

透射变换所需矩阵为3*3的矩阵,矩阵的最后一个数固定为1,所有需要求解这个矩阵的8个方程,而一个点(x,y)可以构建两个方程,所以共需要原图像4个点以及透射变换后对应4个点即可 

opencv中,通过函数cv2.getPerspectiveTransform找到变换矩阵,将cv2.warpPerspective应用于此3x3变换矩阵

import numpy as np
import cv2
img = cv2.imread('1.jpg')
rows,cols = img.shape[:2]#获取图像长和宽
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[100,145],[300,100],[80,290],[310,300]])
T = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, T, (cols,rows))
cv2.imshow('1.jpg', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • OpenBayes在线教程 | 当 Llama 3.1 405B 遇上 Mistral Large 2,谁才是大模型赛道的卷王?
  • 『 Linux 』网络基础
  • unity万向锁代数法解释
  • ESP8266使用舵机以及16路PWM舵机PCA 9685的使用方式
  • 【docker】docker容器部署常用服务
  • Qt 跨平台支持任务栏进度条以及自绘消息通知显示
  • 如何使用nodejs的fsPromise.access()判断文件权限
  • git 常用指令(创建分支、提交分支、解决冲突)
  • [设备] 关于手机设备中几种传感器的研究
  • float32转float16、snorm/sunorm8/16 学习及实现
  • 浅析DNS服务器:办公网DNS的架构思路分享
  • 深度学习6--深度神经网络
  • 【政策分享】最全!2023-2024年国家遥感政策汇总
  • 华为OD机试(C卷,200分)- 可以组成网络的服务器
  • Sparksql array相关函数
  • 《深入 React 技术栈》
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • create-react-app项目添加less配置
  • ESLint简单操作
  • java第三方包学习之lombok
  • Laravel 实践之路: 数据库迁移与数据填充
  • magento 货币换算
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Solarized Scheme
  • spring boot下thymeleaf全局静态变量配置
  • zookeeper系列(七)实战分布式命名服务
  • 机器学习中为什么要做归一化normalization
  • 聚类分析——Kmeans
  • 前端临床手札——文件上传
  • 深度解析利用ES6进行Promise封装总结
  • 详解移动APP与web APP的区别
  • 用Python写一份独特的元宵节祝福
  • 怎样选择前端框架
  • 自制字幕遮挡器
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $(function(){})与(function($){....})(jQuery)的区别
  • $.proxy和$.extend
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (待修改)PyG安装步骤
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 调用php,php 调用.net com组件 --
  • .NET命名规范和开发约定
  • .Net实现SCrypt Hash加密
  • /run/containerd/containerd.sock connect: connection refused
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @Builder注释导致@RequestBody的前端json反序列化失败,HTTP400
  • [ Linux Audio 篇 ] 音频开发入门基础知识