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多线程http下载实现示例
Dec 30 Python
python求解水仙花数的方法
May 11 Python
Python基于有道实现英汉字典功能
Jul 25 Python
Python中Class类用法实例分析
Nov 12 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
python实现两个文件合并功能
Apr 01 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
python实现人脸签到系统
Apr 13 Python
tensorflow常用函数API介绍
Apr 19 Python
Python如何批量生成和调用变量
Nov 21 Python
Python实现机器学习算法的分类
Jun 03 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获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Django中的文件的上传的几种方式
2018/07/23 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python binascii 进制转换实例
2019/06/12 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
Python 内存管理机制全面分析
2021/01/16 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
大学生职业生涯设计书
2014/01/02 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
社区十八大感言
2014/01/19 职场文书
我的长生果教学反思
2014/04/28 职场文书
个人自查自纠材料
2014/10/14 职场文书
办公经费申请报告
2015/05/15 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS