使用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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
Python中使用dom模块生成XML文件示例
Apr 05 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Django中Forms的使用代码解析
Feb 10 Python
python入门前的第一课 python怎样入门
Mar 06 Python
PyQt5每天必学之布局管理
Apr 19 Python
对python 读取线的shp文件实例详解
Dec 22 Python
python儿童学游戏编程知识点总结
Jun 03 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
python函数指定默认值的实例讲解
Mar 29 Python
python入门之算法学习
Apr 22 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 a simple smtp class
2007/11/26 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
python双向链表实现实例代码
2013/11/21 Python
Python实现二叉搜索树
2016/02/03 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
《会变的花树叶》教学反思
2014/02/10 职场文书
外贸专业求职信
2014/03/09 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
六年级作文之预言作文
2019/10/25 职场文书
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android