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网络编程学习笔记(三):socket网络服务器
Jun 09 Python
Python里隐藏的“禅”
Jun 16 Python
Python程序中的观察者模式结构编写示例
May 27 Python
python中requests小技巧
May 10 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
详解TensorFlow在windows上安装与简单示例
Mar 05 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
Django自关联实现多级联动查询实例
May 19 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 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
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
Php图像处理类代码分享
2012/01/19 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php上传文件问题汇总
2015/01/30 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
javascript实现连续赋值
2015/08/10 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
JS & JQuery 动态添加 select option
2016/06/08 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
在漏洞利用Python代码真的很爽
2007/08/26 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
什么是Web Service?
2012/07/25 面试题
葡萄牙语专业个人求职信
2013/12/10 职场文书
事业单位辞职信范文
2014/01/19 职场文书
经典广告词大全
2014/03/14 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
六查六看自查报告
2014/10/14 职场文书
2014年公司工作总结
2014/11/22 职场文书
优秀高中学生评语
2014/12/30 职场文书
趣味运动会新闻稿
2015/07/17 职场文书