19 图像放缩与插值
19 图像放缩与插值
个人资料,仅供学习使用
修改时间——2022年1月24日 20:17:13
学习课程:OpenCV4 C++ 快速入门视频30讲
视频老师:贾志刚
opencv知识点:
- 图像放缩 - resize
- 插值算法 - Interpolation
本课所解决的问题:
- 如何对图像放缩?
- 什么是插值算法?
1.图像放缩
在opencv当中,如果我们想对一个图像放缩,我们要用到这样一个API
- resize
介绍如下
resize
重设图像宽长
共6个参数
第1个参数 输入
第2个参数 输出
第3个参数 输出图像的size
第4个参数 fx 沿水平的比例因子
第5个参数 fy 沿垂直的比例因子
可以使用size做放缩插值,也可以使用fx,fy卷积做放缩插值
第6个参数 插值方法(查阅文档可知,下文会进行简单介绍)
resize的应用场景有很多,其中最常见的就是:
在做一些神经网络训练,深度网络训练,卷积网络训练等的时候,为了方便处理,会把图像resize到指定大小
2.插值算法
关于插值算法,这里简单介绍一下
首先,图像放缩的时候为什么要用插值算法呢?
这是因为,图像放缩时,像素点的位置会发生变化
要想得到放缩后图像像素点的位置,就要经过某种算法计算得来
这种计算的算法就是插值算法。
插值算法有很多相关的应用场景,比如:
- 几何变换
- 透视变换
- 插值计算新像素
- resize
而常见的插值算法有4种,其中前两种比较快,后两种比较慢
INTER_NEAREST = 0
——最近邻插值INTER_LINEAR = 1
——线性插值INTER_CUBIC = 2
——立方插值INTER_LANCZOS4 = 4
——Lanczos插值
opencv4支持的插值算法如下
3.对一张图像进行放缩
接下来我们通过resize对一张图像进行缩小,放大
//函数定义
void resize_demo(Mat& image);
//函数实现
void QuickDemo::resize_demo(Mat& image) {
Mat zoomin, zoomout;//缩小,放大
int w = image.cols;
int h = image.rows;
imshow("原图", image);
//resize(image, zoomin, Size(w / 2, h / 2), 0, 0, INTER_LINEAR);
//imshow("缩小", zoomin);
resize(image, zoomout, Size(w * 2, h * 2), 0, 0, INTER_LINEAR);
imshow("放大", zoomout);
}
对原图进行放大和缩小。
4.插值算法 - 进阶
笔者目前层次,暂时用不到进阶的插值插值算法
关于插值的更深学习,具体的可以查课贾志刚老师的博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步