透视变换的原理可以参看这篇博客,讲得相当好了

https://blog.csdn.net/guduruyu/article/details/72518340

唯一有一点问题是,博客中提到的透视变换公式:

与cv2中的不完全对应,cv2中的公式实际上是

其实原理上是一样的,但是这关系到输入数据的格式

按照原blog的公式,输入的点应该是[u,v,1],而实际上应该是[[u],[v],[1]]。花费一晚上踩的坑,希望对你有用。

另外,附上透视变换后,原图上的点的对应点的坐标求法:

#变换前的四个角点坐标

former = np.float32([[100, 0], [0, 100], [100, 100], [200, 0]])

#变换之后的四个角点坐标

pts = np.float32([[0, 0], [0, 100], [100, 100], [100, 0]])

#变换矩阵M

M = cv2.getPerspectiveTransform(former, pts)

#要变换的原图上的点坐标,注意这里是个二维矩阵!!,按照原博客应该是np.float32([100, 50, 1]),是不正确的

pt = np.float32([[100], [50], [1]])

#原坐标与变换矩阵运算,相当于将该点升维到三维空间

po = M @ pt

#将三维空间的点po的x,y值除以z坐标(拉伸系数,相当于归一化),

po = (po / po[2][0])

print(po)

#po的前两维就是透视变换后的点的x,y值

#当然这一过程可以用cv2中函数实现

print('函数得到的结果:', end='')

po1 = cv2.perspectiveTransform(np.array([[[100, 50]]], dtype=np.float32), M)

print(po1)

#po和po1的结果是一样的

python透视变换原理_python cv2中的透视变换相关推荐

  1. python多进程原理_python多进程的详细介绍(附示例)

    本篇文章给大家带来的内容是关于PHP中的SAPI是什么?如何实现?(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 进程 Python是运行在解释器中的语言,查找资料知道,py ...

  2. python中property魔法方法原理_Python类中的魔法方法之 __slots__原理解析

    在类中每次实例化一个对象都会生产一个字典来保存一个对象的所有的实例属性,这样非常的有用处,可以使我们任意的去设置新的属性. 每次实例化一个对象python都会分配一个固定大小内存的字典来保存属性,如果 ...

  3. python解析原理_Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  4. python pandas series加速原理_python pandas中对Series数据进行轴向连接的实例

    有时候我们想要的数据合并结果是数据的轴向连接,在pandas中这可以通过concat来实现.操作的对象通常是Series. Ipython中的交互代码如下: In [17]: from pandas ...

  5. python 底层原理_Python 探针实现原理

    本文将简单讲述一下 Python 探针的实现原理. 同时为了验证这个原理,我们也会一起来实现一个简单的统计指定函数执行时间的探针程序. 探针的实现主要涉及以下几个知识点: sys.meta_path ...

  6. python sorted原理_Python sort()和sorted()

    Python sort()和sorted() sort 与 sorted 区别: sort() sort()是列表list的方法之一 L.sort(key=None, reverse=False) s ...

  7. python 底层原理_Python字典的核心底层原理讲解

    字典对象的核心是散列表.散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做 bucket.每个 bucket 有两部分:一个是键对象的引用,一个是值对象的引用.所有 bucket 结构和 ...

  8. python 虚拟环境原理_Python 虚拟环境

    建议在开发环境和生产环境下都使用虚拟环境来管理项目的依赖. - Flask 背景 Python 应用通常会使用一些第三方的软件包和模块.不同的应用可能会依赖不同版本的同一个软件包,或者依赖不同的 Py ...

  9. 简述python执行原理_Python程序的执行原理(1)(2)

    Python程序的执行原理(1)(2) 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在 ...

最新文章

  1. TypeReference -- 让Jackson Json在List/Map中识别自己的Object
  2. Qt中的QSpinBox
  3. 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?
  4. 通过 Python 装饰器实现DRY(不重复代码)原
  5. .NET 漫淡(一) --- 需要充分认识的应用程序域-AppDomain
  6. linux shell crontab 定时操作(转)
  7. python列表用什么符号表示_python列表类型
  8. java面经2020
  9. 魔兽世界私服Trinity,从源码开始
  10. Flutter29,毕向东java基础全套视频教程百度网盘
  11. 基于MATLAB的银行卡号识别算法研究
  12. WD移动硬盘无法存储,提示空间不够(已解决)——当移动硬盘遇到坚果云
  13. TeX 主题选讲:TeX 处理器的结构(转)
  14. 计算机专业英语材料,计算机专业英语复习资料
  15. keytool 错误:Keystore was tampered with, or password was incorrect
  16. 详解坐标变换矩阵 - 绕 x 轴旋转的旋转矩阵
  17. Word2013插入分隔符(分节符)实现任意页插入页码
  18. Ubuntu系统搭建SU2计算环境
  19. 【机器学习】多项式回归案例五:正则惩罚解决过拟合(Ridge回归和Lasso回归)
  20. Mybatis使用教程

热门文章

  1. 180522 安卓-DDCTF2018(RSA)
  2. 数据结构严蔚敏代码合集 严书数据结构代码实现 可直接运行 持续更新by myself
  3. 5473. 【NOIP2017提高组正式赛】小凯的疑惑
  4. Java--Integer
  5. 用变量定义数组的几个方法
  6. VBA中字典的写入技巧
  7. Long与Integer之间的转换产生的问题
  8. 一直都在用的rgba与hex颜色系统你了解过吗?
  9. 判断Checkbox选中两种方法
  10. 在Web前端基于CAD图实现等值线在线分析