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 相关文章推荐
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python区分不同数据类型的方法
Oct 14 Python
pycharm 设置项目的根目录教程
Feb 12 Python
如何基于python把文字图片写入word文档
Jul 31 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
第九节--绑定
2006/11/16 PHP
精通php的十大要点(上)
2009/02/04 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python操作字典类型的常用方法(推荐)
2016/05/16 Python
利用aardio给python编写图形界面
2017/08/21 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
美国旅游网站:Tours4Fun
2017/02/17 全球购物
小学防溺水制度
2014/01/29 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
现货白银电话营销话术
2015/05/29 职场文书
2015年暑假工作总结
2015/07/13 职场文书
初中班主任教育随笔
2015/08/15 职场文书