使用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用10行代码实现对黄色图片的检测功能
Aug 10 Python
python构建自定义回调函数详解
Jun 20 Python
理论讲解python多进程并发编程
Feb 09 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
浅谈python出错时traceback的解读
Jul 15 Python
如何利用python进行时间序列分析
Aug 04 Python
浅析Python实现DFA算法
Jun 26 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
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php构造函数实例讲解
2013/11/13 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
图文详解WinPE下安装Python
2016/05/17 Python
Python列表切片用法示例
2017/04/19 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
python简易远程控制单线程版
2018/06/20 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
Python给图像添加噪声具体操作
2019/03/03 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
介绍一下linux的文件系统
2015/10/06 面试题
网络工程师专家职业发展路线
2014/02/14 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL
使用scrapy实现增量式爬取方式
2022/06/21 Python