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基础教程之基本内置数据类型介绍
Feb 20 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
python框架django基础指南
Sep 08 Python
Django在win10下的安装并创建工程
Nov 20 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python 用三行代码提取PDF表格数据
Oct 13 Python
numpy 声明空数组详解
Dec 05 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
python中的unittest框架实例详解
Feb 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中MD5函数使用实例代码
2008/06/07 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Python3数字求和的实例
2019/02/19 Python
Pytorch之finetune使用详解
2020/01/18 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
Python如何合并多个字典或映射
2020/07/24 Python
python解包概念及实例
2021/02/17 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
Linux操作面试题
2015/02/11 面试题
J2EE包括哪些技术
2016/11/25 面试题
有兼职工作经历的简历自我评价
2014/03/07 职场文书
绩效考核实施方案
2014/03/18 职场文书
企业员工薪酬方案
2014/06/04 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
HTML基础详解(下)
2021/10/16 HTML / CSS