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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
pandas的object对象转时间对象的方法
Apr 11 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
面向初学者的Python编辑器Mu
Oct 08 Python
python读取有密码的zip压缩文件实例
Feb 08 Python
Python3.5运算符操作实例详解
Apr 25 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Python使用爬虫猜密码
2016/02/19 Python
Python全局变量用法实例分析
2016/07/19 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
python实现猜数字小游戏
2020/03/24 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
师范生自我鉴定范文
2013/10/05 职场文书
施工资料员岗位职责
2014/01/06 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
2016年春节慰问信息
2015/03/25 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
2019年最新借条范本!
2019/07/08 职场文书
Golang 并发编程 SingleFlight模式
2022/04/26 Golang