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提示No module named images的解决方法
Sep 29 Python
详细解析Python当中的数据类型和变量
Apr 25 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
python创建文件备份的脚本
Sep 11 Python
Python调用服务接口的实例
Jan 03 Python
pytorch 求网络模型参数实例
Dec 30 Python
Pytorch之finetune使用详解
Jan 18 Python
Python list运算操作代码实例解析
Jan 20 Python
python代码如何注释
Jun 01 Python
python如何调用java类
Jul 05 Python
python如何导入依赖包
Jul 13 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模板引擎SMARTY
2006/10/09 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
jquery 面包屑导航 具体实现
2013/06/05 Javascript
JavaScript等比例缩放图片控制超出范围的图片
2013/08/06 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
师德师风整改措施
2014/10/24 职场文书
关于颐和园的导游词
2015/01/30 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android