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实现用于测试网站访问速率的方法
May 26 Python
Python连接DB2数据库
Aug 27 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Django框架教程之正则表达式URL误区详解
Jan 28 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
TensorFLow 变量命名空间实例
Feb 11 Python
Python多线程获取返回值代码实例
Feb 17 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
Python 图片处理库exifread详解
Feb 25 Python
用python开发一款操作MySQL的小工具
May 12 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实现图象锐化代码
2007/06/14 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
实例讲解php实现多线程
2019/01/27 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
python+mysql实现教务管理系统
2019/02/20 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
python中的列表和元组区别分析
2020/12/30 Python
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
上海期货面试题
2014/01/31 面试题
硕士研究生个人求职信
2013/12/04 职场文书
培训自我鉴定
2014/01/31 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
2019消防宣传标语!
2019/07/10 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
python基础之匿名函数详解
2021/04/21 Python
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android