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 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
Python写的一个简单DNS服务器实例
Jun 04 Python
python复制文件的方法实例详解
May 22 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
Python与Java间Socket通信实例代码
Mar 06 Python
Python 3中print函数的使用方法总结
Aug 08 Python
python随机取list中的元素方法
Apr 08 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
python利用Tesseract识别验证码的方法示例
Jan 21 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
超级详细实用的pycharm常用快捷键
May 12 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php 禁止页面缓存输出
2009/01/07 PHP
PHP 编程的 5个良好习惯
2009/02/20 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
javascript中expression的用法整理
2014/05/13 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Python实现最大子序和的方法示例
2019/07/05 Python
在python中用url_for构造URL的方法
2019/07/25 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
Numpy之reshape()使用详解
2019/12/26 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
django有哪些好处和优点
2020/09/01 Python
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
应聘教师自荐信
2013/10/12 职场文书
行政文员岗位职责
2013/11/08 职场文书
大学生学习党课思想汇报
2014/01/03 职场文书
应届大专生自荐书
2014/06/16 职场文书
支部书记四风对照材料
2014/08/28 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
如何书写邀请函?
2019/06/24 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python