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 图片验证码代码
Dec 07 Python
urllib2自定义opener详解
Feb 07 Python
Python生成验证码实例
Aug 21 Python
Python入门_学会创建并调用函数的方法
May 16 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
django从后台返回html代码的实例
Mar 11 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
如何通过python实现IOU计算代码实例
Nov 02 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
根德YB400的电路分析
2021/03/02 无线电
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
简单的JS多重继承示例
2008/03/13 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
python中的装饰器详解
2015/04/13 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
如何用python写个模板引擎
2021/01/14 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
关于毕业的中学校园广播稿
2014/01/26 职场文书
幼儿教育感言
2014/02/05 职场文书
2014国培学习感言
2014/03/05 职场文书
节约能源标语
2014/06/17 职场文书
党员民主评议个人总结
2014/10/20 职场文书
幼儿园教师求职信
2015/03/20 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
婚宴主持词
2015/06/30 职场文书