Python 在OpenCV里实现仿射变换—坐标变换效果


Posted in Python onAugust 30, 2019

在现实的图像操作软件中,经常碰到的不是给出放大多少倍,而是由用户在软件的界面上选择多大的区域,或者选择几个点,那么这样情况下,怎么样来计算出变换矩阵呢?从前面知道变换矩阵是2X3的矩阵,说明有六个未知数,又有中学的代数知识知道要解决六个未知数,那么方程组至少要联立三条方程,要准备三条方程的先决条件,就是要有三组坐标。因此,只要在用户选择的区域里找到三个不同点的坐标,就可以计算出变换矩阵。如果给出三组坐标[0, 0], [200, 0], [0, 200],通过变换之后新坐标是[0, 0], [128, 0], [0, 50],那用什么函数来计算这个矩阵呢?这是要使用OpenCV里的getAffineTransform函数。

下面通过例子来演示这个功能:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图片的路径
imgname = "img1.jpg"
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_COLOR)
#图片的高度和宽度
h,w = image.shape[:2]
#从目标坐标计算出2X3的矩阵,然后调用warpAffine执行
src = np.array([[0, 0], [200, 0], [0, 200]], np.float32)
dst = np.array([[0, 0], [128, 0], [0, 50]], np.float32)
A1 = cv2.getAffineTransform(src, dst)
d1 = cv2.warpAffine(image, A1, (w, h), borderValue = 125)
#显示操作之后的图片
cv2.imshow("d1",d1)
#显示图像
cv2.imshow("image", image)
#等待用户输入,然后删除所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

Python 在OpenCV里实现仿射变换—坐标变换效果

使用坐标变换的方法,可以不用知道中间是否先旋转,还是先平移的操作。

总结

以上所述是小编给大家介绍的Python 在OpenCV里实现仿射变换—坐标变换效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python中利用函数装饰器实现备忘功能
Mar 30 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
python 把列表转化为字符串的方法
Oct 23 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
Tensorflow 实现释放内存
Feb 03 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
python Pexpect模块的使用
Dec 25 Python
如何判断pytorch是否支持GPU加速
Jun 01 Python
详解Python函数print用法
Jun 18 Python
python在OpenCV里实现投影变换效果
Aug 30 #Python
python 模拟贷款卡号生成规则过程解析
Aug 30 #Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 #Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 #Python
python获取Linux发行版名称
Aug 30 #Python
python实现ip地址查询经纬度定位详解
Aug 30 #Python
Django 对IP访问频率进行限制的例子
Aug 30 #Python
You might like
AM/FM收音机的安装与调试
2021/03/02 无线电
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
python同时替换多个字符串方法示例
2019/09/17 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
python 并发下载器实现方法示例
2019/11/22 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
Python之Sklearn使用入门教程
2021/02/19 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
EJB的基本架构
2016/09/22 面试题
怎样客观的做好自我评价
2013/12/28 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL