使用OpenCV实现仿射变换—缩放功能


Posted in Python onAugust 29, 2019

前面介绍怎么样实现平移的功能,接着下来演示缩放功能。比如在一个文档里插入一个图片,发现这个图片占用太大的面积了,要把它缩小,才放得下,与文字的比例才合适。这样的需求,就需要使用仿射变换的缩放功能,而实现这个功能的方法,就是采用齐次坐标的变换功式:

使用OpenCV实现仿射变换—缩放功能

可看到最后一条公式,就是缩放公式,要实现二维图像的缩放,需要构造前面那个缩放矩阵,因此在OpenCV也是构造一个2X3的矩阵。不过,在缩放变换里,要考虑另外一个问题,比如图片放大之后,原来两点像素的距离变大了,在中间留下了空间,那么中间空白的像素点怎么样处理呢?其实图像处理要完成两个独立的算法计算,首先需要一个算法实现空间坐标变换,用它描述每个像素如何从初始位置移动到终止位置。其次需要一个插值算法完成输出图像的每个像素的颜色值。在放大或缩小里,就需要计算像素的颜色值了,就需要使用插值算法。不过插值算法也是五花百门的,最简单的方法就是向邻近元素借用它们的值,比如放大之后原来元素坐标为1和3了,留下坐标2的点为空,那么2的点就可以借用1或3点的颜色值,在opencv里就可以使用cv.INTER_NEAREST标志表示这个意思。有时候中间留下的点很多,如果全部取一个点的颜色值,就会在图形上出现一片相同的颜色值,让图片不好看。为了解决这个问题,向更好的插值算法推广,接着引入双线性插值(cv.INTER_LINEAR),这个插值算法使用了附近四个点的颜色值来计算,这样就不是单独考虑一个元素的值了,这样就比只取一个点的值好很多,因此也成为opencv里仿射函数里默认的值。如果要更好的插值,还有很多更高级的三次样条插值等等,不过计算量也上去了。

下面通过例子来演示缩放的操作:

#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执行缩放
A1 = np.array([[0.5, 0, 0], [0, 0.5, 0]], np.float32)
d1 = cv2.warpAffine(image, A1, (w, h), borderValue = 125)
 
#显示操作之后的图片
cv2.imshow("d1",d1)
 
#显示图像
cv2.imshow("image", image)
 
#等待用户输入,然后删除所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

使用OpenCV实现仿射变换—缩放功能

左图是X轴和Y轴都缩小一半的图片,右边是原图。

在这个例子里与平移不一样的,就是矩阵的变化:

np.array([[0.5, 0, 0], [0, 0.5, 0]], np.float32)

就是矩阵对角线上的值发生了变化,如果要放大就是变为大于1的值。

总结

以上所述是小编给大家介绍的使用OpenCV实现仿射变换—缩放功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现文本文件合并
Dec 29 Python
CentOS6.5设置Django开发环境
Oct 13 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
python+pyqt实现右下角弹出框
Oct 26 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
python图书管理系统
Apr 05 Python
python模块smtplib学习
May 22 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
Python实现Restful API的例子
Aug 31 Python
python实现两个文件夹的同步
Aug 29 #Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 #Python
python+rsync精确同步指定格式文件
Aug 29 #Python
django-rest-swagger对API接口注释的方法
Aug 29 #Python
Python3视频转字符动画的实例代码
Aug 29 #Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 #Python
python中property属性的介绍及其应用详解
Aug 29 #Python
You might like
PHP新手上路(三)
2006/10/09 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
应届毕业生简历自我评价
2014/01/31 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
揠苗助长教学反思
2014/02/04 职场文书
顶碗少年教学反思
2014/02/21 职场文书
学生逃课检讨书
2015/02/17 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
员工加薪申请报告
2015/05/15 职场文书
Python django中如何使用restful框架
2021/06/23 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers