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读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
numpy concatenate数组拼接方法示例介绍
May 27 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
Mac安装python3的方法步骤
Aug 09 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
Python连接mysql方法及常用参数
Sep 01 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批量生成随机用户名
2008/07/10 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
js点击选择文本的方法
2015/02/09 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
JSON 数据格式详解
2017/09/13 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
python实现支付宝转账接口
2019/05/07 Python
Python笔试面试题小结
2019/09/07 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
高校教师自荐信范文
2014/03/13 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
新娘婚礼致辞
2015/07/27 职场文书
总经理年会致辞
2015/07/29 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang