OpenCV-Python仿射变换开发中遇到的坑

仿射变换--getAffineTransform和wrapAffine wrapAffine。 阅读详情
☞ ░ 老猿Python博文目录:https://blog.youkuaiyun.com/LaoYuanPython ░
仿射变换博文传送门(带星号的为付费专栏文章):
  1. *图像仿射变换原理1:齐次坐标来龙去脉详解
  2. *图像仿射变换原理2:矩阵变换、线性变换和图像线性变换矩阵
  3. *图像仿射变换原理3:仿射变换类型及变换矩阵详解
  4. *图像仿射变换原理4:组合变换及对应变换矩阵
  5. *图像仿射变换原理5:组合变换矩阵的OpenCV-Python实现
  6. OpenCV-Python图像处理:仿射变换详解及案例
  7. OpenCV-Python仿射变换开发中遇到的坑
  8. openCV仿射变换:getAffineTransform的案例
  9. 为什么称图像旋转、错切、缩放变换是线性变换?
  10. 图像仿射变换:绕点旋转和指定直线依赖轴shear错切变换矩阵
  11. 图像仿射变换shear怎么翻译?剪切、错切、推移哪个译词好?
  12. 仿射变换原理和其OpenCV-Python实现知识汇总
OpenCV-Python仿射变换开发中遇到的坑

在使用OpenCV-Python开发仿射变换应用时,老猿遇到了一些坑,估计这些坑是很多初学者会遇到,在这儿总结一下,供大家借鉴参考:

一、坐标原点相关问题

OpenCV的图像窗口的坐标原点在左上角,在开发中需要注意:

  1. 旋转变换矩阵的旋转角度的正负值对应旋转方向
    当旋转变换矩阵为
    在这里插入图片描述
    其正值表示顺时针旋转,如果需要用正值表示逆时针旋转,则旋转矩阵需要变为:
    在这里插入图片描述

  2. 使用OpenCV的函数getRotationMatrix2D构建旋转矩阵时,逆时针旋转角度为正值

  3. 平移时的平移距离需要考虑坐标原点的位置在左上角。

二、WARP_INVERSE_MAP标记问题

该问题是因为OpenCV官方文档的材料说明存在问题导致,我们来看看官方描述:

在这里插入图片描述

针对第一个红圈标记的说明,老猿在翻译时,将其理解为设置WARP_INVERSE_MAP标记时,计算值等于上面计算公式的值,如果不设置则会求逆矩阵。但实际上是没设置标记使用该公式,设置了先求逆矩阵再用逆矩阵参与运算

三、矩阵顺序问题

在组合仿射变换由应用构建多个变换矩阵相乘时,一定要记得最先进行的变换要在连乘变换矩阵的最右边。例如先平移、再旋转、再反平移,则平移矩阵在最右边,反平移矩阵在最左边。

四、旋转角度求三角函数值问题

三角函数使用时,角度的数值如30°不能直接作为三角函数的参数,而是要除以180乘以π的值作为参数。

五、仿射矩阵行数问题

warpAffine调用的参数M仿射矩阵是2*3的,但矩阵乘法不支持2*3的矩阵相乘,因此需要先用3*3的单应性矩阵相乘,最后结果取前2行作为仿射矩阵。

六、矩阵乘法

numpy的矩阵既可以支持两个矩阵直接相乘,如A*B,但这个相乘不是标准矩阵乘法,而是矩阵各相同位置元素直接相乘,在仿射矩阵乘法中需要用numpy的matmul或dot进行矩阵相乘,否则变换效果就不对。

七、小结

本文介绍了老猿在使用OpenCV-Python进行仿射变换开发中遇到的坑,这些问题可能大家或多或少会碰到,这些问题涉及基本知识的理解、官方资料的坑等方面,希望能帮助到大家。

更多图像处理的介绍请参考专栏《OpenCV-Python图形图像处理 https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html》和《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》相关文章。

更多图像处理的数学基础知识请参考专栏《人工智能数学基础 https://blog.youkuaiyun.com/laoyuanpython/category_10382948.html》

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

如果对文章内容存在疑问,可以在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。

关于老猿的付费专栏

  1. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.youkuaiyun.com/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取优快云文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░
Opencv+Python 基于仿射变换进行图像倾斜矫正 实例练习 (超详细备注) 主要流程: 1.首先得到灰度图像 2.对灰度图像进行二值化 3.然后找一个最小矩形框住对象轮廓(opencv中有相应的函数) 4.这个最小矩形的函数会返回一个角度 5.我们利用这个角度得到一个旋转的矩形(仿射变换所需要的) 6.使用仿射变换得到矫正后的图像 1.得到灰度图像 //读取图像 src= cv.imread('imageTextR.png') //cv.imshow('src',src) //cvtColor函数用于转换色彩空间,将图像转换为GRAY灰度图像 gray=cv.cvtColor( 阅读详情

相关推荐

getPerspectiveTransform通过4对点确认透视变换矩阵的原理分析

本文分析了OpenCV-Python中getPerspectiveTransform通过4对点确认透视变换矩阵的原理,有助于大家理解透视变换相关知识。

老猿Python 6214

狗狗变形记:任选4点的投影变换warpPerspective OpenCV-Python案例

本节介绍了使用OpenCV-Python的getPerspectiveTransform函数,通过4个源图像的点映射到目标图像的四角对应点得到投影变换的变换矩阵,然后使用warpPerspective进行投影变换,可以对选择4个点进行投影变换的步骤有清晰的理解。

老猿Python 1万+

OpenCV 几何图像变换模块 - getAffineTransform 函数

在上面的代码中,我们首先定义了源图像上的三个点的坐标和目标图像上对应的三个点的坐标。本文将重点介绍 OpenCV 中的 getAffineTransform 函数,该函数用于计算从三个点的源图像坐标到目标图像坐标的仿射变换矩阵。getAffineTransform 函数在计算机视觉和图像处理中具有广泛的应用,它为我们提供了一种方便的方式来实现图像的仿射变换操作。通过合理地选择源图像上的点和目标图像上对应的点,我们可以实现各种不同的图像变换效果。运行上述代码,你将看到原图像和变换后的图像在窗口中显示出来。

bug_code702的博客 816

getAffineTransform函数

getAffineTransform函数 函数作用: 主要用于生成仿射变换矩阵 一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移). 综上所述, 我们能够用仿射变换来表示: 旋转 (线性变换)平移 (向量加)缩放操作 (线性变换) 你现在可以知道, 事实上, 仿射变换代表的是两幅图之间的 关系 . 我们通常

qq_18343569的博客 1万+

【python opencv】图像的仿射变换

图像的仿射变换是一种通过矩阵变换来对图像进行操作的方法。通过仿射变换,我们可以对图像进行平移、旋转、缩放、倾斜等操作,而这些变换后的图像仍然保持了原图的直线性和平行性。仿射变换不仅能改变图像的形状和位置,还能进行一些复杂的几何操作。你可以把图像想象成一个平面,仿射变换就像是对这个平面上的图像进行拉伸、压缩或旋转等。有时,我们需要通过指定图像中的三个点来定义一个仿射变换。通过三个点的映射关系,我们可以计算出仿射变换矩阵。import cv2# 读取图像# 定义原图像中的三个点(源点)

m0_62599305的博客 791

图像仿射变换原理5:组合变换矩阵的OpenCV-Python实现

本节以绕图像中心点循环旋转的组合仿射变换和以图像中心点开始与x轴成30°夹角的线段作为依赖轴的循环错切的组合仿射变换为例,详细介绍了二者的OpenCV-Python实现。通过相关案例的介绍,对前面4节介绍的仿射变换原理将有更深入的认识。

老猿Python 3100

OpenCV-Python图像处理:仿射变换详解及案例

本节介绍了仿射变换的概念、类型、基本仿射变换矩阵、OpenCV-Python与仿射变换相关的主要函数及语法说明,并提供了两种不同方式实现的图像旋转和任选三个点将圈定子图放大的示例。通过阅读相关内容可以有助于大家理解仿射变换的概念和仿射变换的OpenCV-Python实现方法。

老猿Python 1万+

OpenCV-Python实战(4)——OpenCV常见图像处理技术

图像处理技术是计算机视觉项目的核心,通常是计算机视觉项目中的关键工具,可以使用它们来完成各种计算机视觉任务。因此,如果要构建计算机视觉项目,就需要对图像处理有足够的了解。在本文中,将介绍计算机视觉项目中常见的图像处理技术,主要包括图像的几何变换和图像滤波等。

盼小辉丶的博客 3万+

Python+Opencv4点仿射变换

目录一、场景需求解读二、算法原理简介三、算法实现步骤四、算法代码实现五、算法效果展示与分析六、思维拓展参考资料注意事项 一、场景需求解读   在处理现实生活中的图像处理问题时,我们经常会遇到一种情况-即我们将要处理的目标的位置是斜的,我们需要使用仿射变换进行矫正。当你做了很多现实场景中的案例之后,你就会发现这是一个非常通用的模块,因而本篇博客针对这个问题进行了详细的论述,具体的案例如下图所示,左边...

WZZ18191171661的博客 1万+

注册“Oracle Provider for OLE DB”和创建链接服务器

注册“Oracle Provider for OLE DB”和创建链接服务器 在sql server 数据库上创建链接服务器,连接oracle数据库,访问接口需要设置为:“Oracle Provider for OLE DB”。 如果电脑上没有这个驱动,安装一个完整的Oracle11gR2程序是一个有效的方法,但这个64位版本的安装包有2个多G, 相当庞大,如果仅仅...

weixin_30760895的博客 2384

[NVME] CMBLOC-Controller Memory Buffer Location

CMBLOC-Controller Memory Buffer Location

jinyuya的博客 989

Python使用OpenCV仿射变换实例

图像img的像素为534*300,img.shape = (300, 534, 3)。 需要引入: import cv2 as cv import numpy as np img.shape得到的(300, 534, 3),前者300是高度,y轴的值,后者534是宽度,x轴的值,这一点有些不同。 图像的xy轴,是以图像左上角顶点为(0, 0)原点,类似于css。从顶点沿宽度向右是x正轴,沿高度向下是y正轴。 一、平移变换 cv2.warpAffine() 仿射变换(从二维坐标到二维

qq_42720183的博客 2775

FOC:【1】浅析SVPWM算法(七段式)以及MATLAB仿真验证

最近的科研项目需要使用到SVPWM算法,网上相关的原理介绍很多。对于纯应用的需求来说,或许有些内容上的冗余。 本文的目的就是简要并且明确的给出具体的计算步骤,可以帮助快速上手。同时利用MATLAB进行了简单算法验证。.....................

Alex的技术博客 1万+

python+opencv三点仿射变换

一张图来表明要实现的功能: 说明:将一张正正方方的矩形图转换成平行四边形(甚至不规则四边形)的操作。 平行四边形的图形看起来具有3D视角,在很多方面都有应用。我们直接来实现这个操作: 1. 实现 我们只需对应出3个点就可以使用opencv封装好的函数进行这个操作了,哪三个点呢?左上、右上、左下。 三个点的坐标就是6个数字,我们把6个数字设置成自己想要的位置,就可以实现三点仿射变换。我...

木盏 5088

s9keaz128 UART Bootloader 单片机篇(上)

网络上充斥着各种各样的串口升级方案,基本都是基于Y-Mode协议下载。采用这种升级方案学习还是可以,用在产品上还是有点欠缺。如下载完成后,需要把时间发送到设备就不好搞了。如下这个设备返回的信息,最后一项就是固件更新时间。固件名称: KEA128编译时间固件版本: 1.0.3硬件版本: 1.0.3产品序列号功能名称: App固件更新时间串口升级演示视频。

一人科技 1795

STM32H743内存告急?手把手教你用CubeMX+FMC外扩32MB SDRAM(W9825G6KH-6)

本文详细介绍了如何在STM32H743上使用CubeMX和FMC外扩32MB SDRAM(W9825G6KH-6),解决内存不足问题。从硬件选型、CubeMX配置到初始化代码实现,提供完整的配置教程和性能优化技巧,帮助开发者高效扩展内存,适用于图形界面和复杂算法处理。

weixin_30568591的博客 494

仿射变换原理和其OpenCV-Python实现知识汇总

本文是老猿关于仿射变换的原理、概念以及OpenCV-Python实现额的导览式文章,通过本文作为入口,读者可以非常快速的理解仿射变换的相关知识以及开发应用。

老猿Python 3669

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1669

OpenCV-python小玩意20 仿射变换

本章节研究了仿射变换各种玩法,最重要的还是要融会贯通。组合变换时才能发挥它真正的实力。

懒人的技术笔记 2097

P1003 [NOIP2011 提高组] 铺地毯 python题解

解题思路: 1、根据题意,所有地毯都是挨着铺的,所以最上面的一条符合题意的一定是从后往前数的第一条符合题意的。 2、符合题意要求x和y同时满足大于等于地毯左边坐标并且小于等于地毯右边坐标。 代码如下: n = int(input()) a = [] for i in range(n): a.append(list(map(int,input().split()))) x,y = list(map(int,input().split())) l = len(a) while l > 0: ..

繁华三千东流水不舍昼夜的博客 1620

用Python爬取大连商品交易所期货实时行情:从入门到实战

python复制编辑# utils.py"豆粕": "M0","铁矿石": "I0","聚乙烯": "L0","玉米": "C0","聚丙烯": "PP0","棕榈油": "P0"本项目展示了:✅ 如何从新浪财经 API获取主力合约实时数据✅ 使用Python异步爬虫技术) 提升效率✅ 利用pandas和matplotlib进行结构化分析与可视化✅ 具备良好的扩展性,可对接金融、农业、能源等数据需求场景✅ 可作为期货量化策略数据源✅ 可嵌入自动化报告系统。

2201_76125261的博客 1247

老侃教你学机器学习 OpenCV图像的仿射变换

想象我们手上有一张矩形纸片,如果你固定纸片的一边,并沿着另一边施加一个平行于该边的力,这张纸片就会变形为一个平行四边形。假设要把图像的宽高分别缩放为0.5和0.8,那么对应的缩放因子sx=0.5,sy=0.8。剪切操作可以改变图形的形状,以便其在某个方向上倾斜,它将对象的形状改变为斜边平行四边形,而。相较于图像旋转中只能等比例的缩放,图像缩放更加灵活,可以在指定方向上进行缩放。在OpenCV中,图片的镜像旋转是以图像的中心为原点进行镜像翻转的。sx和sy分别表示在x轴和y轴方向上的缩放因子。

2201_75957476的博客 2040

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【OpenCV】Python图像处理之仿射变换

仿射变换是一种保持图像平行性和共线性的几何变换,通过线性变换(缩放、旋转、剪切)与平移变换的组合实现。OpenCV提供cv2.warpAffine()函数进行仿射变换,需先构造2×3变换矩阵,其中前2×2子矩阵控制线性变换,最后一列控制平移。常用方法包括三点映射构造矩阵(cv2.getAffineTransform())和手动构造矩阵。仿射变换广泛应用于图像校正、姿态调整、视角变换等场景,其特点是保持平行线变换后仍平行,仅需3个非共线点即可确定变换关系。与透视变换不同,仿射变换不能改变平行线的相交关系。使用

棒棒的皮皮 1563

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Python图像处理篇】opencv中的仿射变换和透视变换

opencv提供了两个变换函数,cv2.warpAffine和cv2.warpPerspective,使用这两个函数可以实现所有类型的变换。

ZZQ_UESTC的博客 8838

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

opencv-python实战项目五:基于光流法与仿射变换的视频消抖

视频防抖技术是一种通过算法补偿摄像过程中产生的抖动,以提升视频画面稳定性的方法。其主要目的是消除由于手持拍摄、移动平台震动或摄像设备机械不稳定等因素引起的画面波动,从而提高视频的整体质量和观看体验。特征点检测与跟踪:通过在视频序列中检测并跟踪特征点,捕捉帧与帧之间的相对运动。运动估计:基于特征点的跟踪结果,估计摄像机的运动向量,包括平移、旋转和缩放等参数。运动平滑:对估计出的运动向量进行滤波处理,以减少突兀的运动变化,实现平滑的运动轨迹。画面矫正。

HanWenKing的博客 2967

仿射变换(cvWarpAffine) python opencv

图像变换-图像拉伸、收缩、扭曲、旋转 - 仿射变换(cvWarpAffine)

jacke121的专栏 9409
上一篇: 仿射变换原理和其OpenCV-Python实现知识汇总
下一篇: 狗狗变形记:任选4点的投影变换warpPerspective OpenCV-Python案例
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值