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开发vim插件及心得分享
Nov 04 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
基于anaconda下强大的conda命令介绍
Jun 11 Python
python 对key为时间的dict排序方法
Oct 17 Python
python生成requirements.txt的两种方法
Sep 18 Python
kafka-python 获取topic lag值方式
Dec 23 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
python 19个值得学习的编程技巧
Aug 15 Python
提高python代码运行效率的一些建议
Sep 29 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 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 数学运算验证码实现代码
2009/10/11 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
js实现旋转木马效果
2017/03/17 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python学习笔记_数据排序方法
2014/05/22 Python
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
快速了解Python开发环境Spyder
2020/06/29 Python
中国网上药店领导者:1药网
2017/02/16 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
基层工作经历证明
2014/01/13 职场文书
初中政治教学反思
2014/01/17 职场文书
2014年党务公开方案
2014/05/08 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
公司总经理岗位职责
2015/04/01 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
java中如何截取字符串最后一位
2022/07/07 Java/Android