opencv之透视变换

2023-11-05

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。

原理:

         通用的变换公式为:


u,v是原始图片左边,对应得到变换后的图片坐标x,y,其中
变换矩阵可以拆成4部分,表示线性变换,比如scaling,shearing和ratotion。用于平移,产生透视变换。所以可以理解成仿射等是透视变换的特殊形式。经过透视变换之后的图片通常不是平行四边形(除非映射视平面和原来平面平行的情况)。

重写之前的变换公式可以得到:


所以,已知变换对应的几个点就可以求取变换公式。反之,特定的变换公式也能新的变换后的图片。

 

变换矩阵的求解:

 

简单的看一个正方形到四边形的变换:
变换的4组对应点可以表示成:

根据变换公式得到:


定义几个辅助变量:


都为0时变换平面与原来是平行的,可以得到:


不为0时,得到:


求解出的变换矩阵就可以将一个正方形变换到四边形。反之,四边形变换到正方形也是一样的。

 

应用:

于是,我们通过两次变换:四边形变换到正方形+正方形变换到四边形就可以将任意一个四边形变换到另一个四边形。

opencv函数:

校正前的四边形定点坐标:

  srcTri[0].x = x_lt; 
  srcTri[0].y = y_lt; 
  srcTri[1].x = x_rt; 
  srcTri[1].y = y_rt; 
  srcTri[2].x = x_lb; 
  srcTri[2].y = y_lb; 
  srcTri[3].x = x_rb; 
  srcTri[3].y = y_rb; 


校正后的四边形定点坐标:  
  dstTri[0].x = x_lt; 
  dstTri[0].y = y_lt; 
  dstTri[1].x = x_lt+dist_h; 
  dstTri[1].y = y_lt; 
  dstTri[2].x = x_lt; 
  dstTri[2].y = y_lt+dist_v; 
  dstTri[3].x = x_lt+dist_h; 
  dstTri[3].y = y_lt+dist_v; 

Mat M=getPerspectiveTransform(srcTri,dstTri);

warpPerspective( src, dst_correct,M,Size(src.cols ,src.rows), INTER_LINEAR, BORDER_CONSTANT,Scalar());

详见原创:http://blog.csdn.net/xiaowei_cqu/article/details/26478135

待解决:w及w'是什么,如何赋值??如果你知道可以留言告知,方便大家理解吧!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv之透视变换 的相关文章

  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

    根据 Silencer的建议 我使用了他发布的代码here https stackoverflow com questions 48244328 copy shape to blank canvas opencv python 482465
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 是否可以在 PyScript 中使用 OpenCV 模块?

    我想使用 opencv 模块 但无法导入 OpenCV 那么我该如何解决这个问题呢 顺便说一句 Pyodide 支持 OpenCV 示例代码 https i stack imgur com ahwex jpg 尚不支持 OpenCV 此时O
  • OpenCV:如何从网络摄像头获取原始 YUY2 图像?

    你知道如何获得吗raw YUY2来自网络摄像头的图像 使用 OpenCV DirectShow 无 VFW http opencv willowgarage com wiki CameraCapture http opencv willow
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • OpenCV 2.2 和多 CPU - opencv_haartraining.exe 是多线程的吗?

    我在 VS 2010 上构建了 OpenCV 2 2 启用了 TBB 3 支持 我确保所有项目都有正确的 tbb lib 目录 并将 tbb lib 列为依赖项 通过隐藏 tbb dll 进行验证 果然 haartraining exe 抱
  • Python:Urllib2 和 OpenCV

    我有一个程序 可以将图像保存在本地目录中 然后从该目录中读取图像 但我不想保存图像 我想直接从url读取它 这是我的代码 import cv2 cv as cv import urllib2 url http cache2 allposte
  • opencv水印周围的轮廓

    我想在图像中的水印周围画一个框 我已经提取了水印并找到了轮廓 但是 不会在水印周围绘制轮廓 轮廓是在我的整个图像上绘制的 请帮我提供正确的代码 轮廓坐标的输出为 array 0 0 0 634 450 634 450 0 dtype int
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • Opencv 2.4.2 代码讲解-人脸识别

    我参考OpenCV提供的文档制作了一个人脸识别程序 可以识别多个人脸 并且工作正常 在文档中 他们制作了省略号来突出显示脸部 我不明白的是他们如何计算椭圆的中心 他们的计算如下 for int i 0 i lt faces size i P
  • 未加载库:@rpath/libopenblasp-r0.2.19.dylib

    我应该如何解决这个问题 Monas MacBook Pro 02 02 mona python Python 3 6 1 Anaconda custom x86 64 default May 11 2017 13 04 09 GCC 4 2
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • 在 opencv 中一次性将旋转和平移结合起来

    我有一段用于旋转和平移图像的代码 Point2f pt 0 in rows double angle atan trans c trans b 180 M PI Mat r getRotationMatrix2D pt angle 1 0
  • 将 CvSeq 保存到数组

    我对 OpenCV 文档有点迷失 我想将 cvFindContours 返回的 CvSeq 保存到一个数组中 据我了解它将返回 CvContour 的 seq 但我找不到它包含的内容 我应该保存其中的哪些部分 稍后我可以迭代它并说调用 cv
  • 在openCV内部调用Gstreamer

    我需要在 openCV 代码中调用 Gstremaer 本质上是打开摄像机 当我查看源代码时 modules highgui src cap gstreamer cpp似乎是我正在寻找的文件 我用 Gstreamer 标志编译了 OpenC
  • CV_MAT_ELEM 中的编译错误

    调用estimateRigidTransform 的结果是我得到一个名为 trans 的cv Mat 对象 为了检索其包含的矩阵 我尝试以这种方式访问 其元素 for i 0 i lt 2 i for j 0 j lt 3 j mtx j
  • 使用 OpenCV 从轮廓获取掩模

    我想从我通过 cv findContours 计算的轮廓 它只存在 1 个轮廓 获取图像掩模 然而 虽然我的轮廓变量不为空 但我无法使用 cv drawContours 检索图像蒙版 我的目标图像始终为空 这是我的代码 img mosaic
  • OpenCV InRange 参数

    我在 Android 上使用 OpenCV 来实时查找特定颜色的圆圈 我的第一步是仅保留与我正在寻找的定义颜色相对应的像素 在本例中为红色或绿色 示例图像 https i stack imgur com CIozU jpg 为此 我正在使用

随机推荐

  • 百度旋转验证码识别方案

    废话不多说 直接上代码 需要看识别效果的小伙伴可以直接访问这里 https www detayun cn tool verifyCodeHomePage 1679620548194 代码如下 author dengxinyan import
  • vue 实现图片懒加载

    一 懒加载的目的 有些页面可能展示的是大量的图片 如果我们一次性加载所有图片就会浪费性能 影响用户体验 所以我们就会懒加载这些图片 即可视区域之外的图片不加载 随着页面的滚动 图片进入可视区域 则触发图片的加载显示 优点 页面加载速度快 用
  • SSM 框架原理简介及解析

    简介 ssm框架就是标准的MVC模式 标准的SSM框架有四层 分别是dao层 service层 controller层和View层 使用spring实现业务对象管理 使用spring MVC负责请求的转发和视图管理 mybatis作为数据对
  • 2023最新版本Pycharm安装教程【2023.1.3】

    前言 本文方法可以安装使用截止当前2023 1 3最新版本Pycharm 过程非常简单 按照下面的步骤来一分钟即可搞定 1 下载安装 已经安装过的可以跳过该步骤 下载 到官网地址下载正版安装包JetBrains Pycharm官网下载地址
  • android手机相册多张上传,一键批量上传手机照片到QQ相册功能 节省手机流量

    十一双假期刚刚结束 无论回家还是出游 不管是家里的庭院小景还是一路上的美景扑面 你一定会拿起手机不断按下快门 记录每一个美的瞬间 如今长假归来 我们都希望能够马上和好友一起分享假期的美景趣事 可是 手机中照片数量太多 如何才能实现快速又便捷
  • Nuget配置修改-globalPackagesFolder(默认包存放位置)

    环境 nuget windows2010 nuget默认的全局包下载地址一般为 C Users username nuget packages 项目多了之后 nuget下载的包就回慢慢的变多 导致c盘被大量占用 这时候我们想要将nuget的
  • (三-3)机器学习中调参的基本思想+随机森林+实例(共3小节,文章代码即文章中所有的代码)

    通过画学习曲线 或者网格搜索 我们能够探索到调参边缘 代价可能是训练一次模型要跑三天三夜 但是在现实中 高手调参恐怕还是多依赖于经验 而这些经验 来源于 1 非常正确的调参思路和方法 2 对模型评估指 标的理解 3 对数据的感觉和经验 4
  • HEVC 编解码资源

    资料 overview 等 csvt系列详见HHI主页 适合 入门 Encoder Description 适合入门 Recommendation H 265 pdf 2016 12 22 标准文档 适合 提高 解码 High Effici
  • 订单管理系统功能

    订单管理系统的工作流程是首先对客户的订单信息进行接收 然后对订单进行处理 及时掌握交易动态 在有突发状况发生时及时反馈 订单管理系统是物理管理系统中不可缺少的一部分 商淘云跟您分享一般的订单管理系统有哪些功能 1 业务流程管理 包括订单管理
  • 程序员屌丝逆袭之路不是炒股

    最近这一段时间 你身边是不是大多数人都在谈论股票 那就对了 无论走到哪都能听到 今天又绿了 我的股票跌停了 冲上5000点啦 等等之类的话 我还不是一个股民 一直都不是 因为不懂 不敢入市 因为有人跳楼 害怕入市 最主要的原因是 因为手里没
  • 3.30 OrCAD中原理图文件怎么进行DRC检测?

    笔者电子信息专业硕士毕业 获得过多次电子设计大赛 大学生智能车 数学建模国奖 现就职于南京某半导体芯片公司 从事硬件研发 电路设计研究 对于学电子的小伙伴 深知入门的不易 特开次博客交流分享经验 共同互勉 全套资料领取扫描文末二维码 温馨提
  • 如何判断用户是否已关注公众号

    一 微信公众平台配置 1 获取appid appsecret 添加白名单 登录微信公众平台 进入基本配置 开发中需要用到两个参数 appId和appSecret appSecret只展示一次 需保存下来 否则需要重置获取 获取access
  • 以太坊day(4)

    以太坊day 4 一 遇见的错误 1 1 Error Invalid JSON RPC response 二 goland上进行合约的开发 2 1 需要的源 2 2 合约文件 2 3 编译合约 2 4 部署合约 2 5 获取合约实例 2 6
  • AIGC的1000+篇文章总结

    AIGC的1000 篇文章总结 本文收集和总结了有关AIGC的1000 篇文章 由于篇幅有限只能总结近期的内容 想了解更多内容可以访问 http www ai2news com 其分享了有关AI的论文 文章 图书 query AIGC AI
  • vue中的函数式组件

    用过react的同学都知道 函数式组件在react中的应用是很流行的 那如何在vue中使用函数式组件呢 什么是函数式组件 熟悉react的同学应该都知道 react中的函数式组件其实就是一个接收一些prop的函数 然后返回HTML vue的
  • Active Directory配置与应用

    Active Directory 配置与应用
  • 菜鸟学习nodejs--回调函数

    什么是回调函数 如果大家使用过JQuery 那么会掉函数就像家常便饭一样 例如我们经常会给一个事件传一个function的参数 其实这就是回调函数 回调函数就是我们所说的异步 如果还是有点蒙 那么我们来举个例子 我们新建一个index1 h
  • 基于混沌系统和DNA算法的RGB图像加密(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 本文介绍了基于混沌系统和DNA编码的彩色数字图像加密 解密 抗噪声性能分析以及抗裁剪性能分析 2 运行结果 3 参考文献 1 李红凯 基于混沌理论和DNA序列编码的
  • Qt之点击QLineEdit显示软键盘

    点击QLineEdit显示软键盘 在嵌入式开发时 不能通过鼠标键盘输入是很常见的 这时候就需要通过软件层 实现软键盘和输入法来满足用户需求 一般来说 软键盘的显示通常和QLineEdit的点击事件挂钩 而QLineEdit与QPushBut
  • opencv之透视变换

    透视变换 Perspective Transformation 是将图片投影到一个新的视平面 Viewing Plane 也称作投影映射 Projective Mapping 原理 通用的变换公式为 u v是原始图片左边 对应得到变换后的图