使用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升级提示Tkinter模块找不到的解决方法
Aug 22 Python
Python实现远程调用MetaSploit的方法
Aug 22 Python
python实现读取命令行参数的方法
May 22 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
python数据预处理 :数据共线性处理详解
Feb 24 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
python如何利用paramiko执行服务器命令
Nov 07 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
Python实现的桶排序算法示例
2017/11/29 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
用python解压分析jar包实例
2020/01/16 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
护理专业自荐信
2013/12/03 职场文书
高中班长自我鉴定
2013/12/20 职场文书
学生上课说话检讨书
2014/10/25 职场文书
运动会加油稿20字
2014/11/15 职场文书
音乐剧猫观后感
2015/06/04 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python