博客
关于我
opencv resize
阅读量:791 次
发布时间:2023-02-23

本文共 1930 字,大约阅读时间需要 6 分钟。

在图像处理过程中,有时需要将图像调整到相同大小,以便于后续处理,这时常常会使用图像 resize 函数。OpenCV 提供了 resize 函数,接下来将详细介绍其工作原理和使用方法。

resize 函数参数说明

函数定义为:

void resize(InputArray src, OutputArray dst, Size dsize,           double fx=0, double fy=0, int interpolation=INTER_LINEAR)
  • src:输入图像数组。
  • dst:输出图像数组。
  • dsize:指定输出图像的大小。如果为 Size(0, 0),则输出图像的大小根据 fxfy 计算得出。
  • fx:沿 X 轴的缩放系数,默认为 0。
  • fy:沿 Y 轴的缩放系数,默认为 0。
  • interpolation:插值方式,取值范围如下:
    • INTER_NEAREST:最近邻插值(默认)
    • INTER_LINEAR:线性插值
    • INTER_AREA:区域插值
    • INTER_CUBIC:三次样条插值
    • INTER_LANCZOS4:Lanczos 插值

dsize 计算方式

如果 dsizeSize(0, 0),则输出图像的大小自动计算为:

dsize = Size(round(fx * src.cols), round(fy * src.rows))

注意:fxfy 不能同时为 0,此时 dsize 将根据 fxfy 计算得出。

缩放系数计算

默认情况下,缩放系数 fxfy 可以通过以下公式计算:

fx = (double) dsize.width / src.cols;fy = (double) dsize.height / src.rows;

插值类型解析

1. INTER_NEAREST 最近邻插值

目标图像的每个像素点取其对应的最近邻原图像像素点的值。假设原图像大小为 (s_height, s_width),目标图像大小为 (d_height, d_width),则高度和宽度的缩放比例为:

h_ratio = s_height / d_height;w_ratio = s_width / d_width;

目标图像像素 (x, y) 的值等于原图像 (x * w_ratio, y * h_ratio) 处的值。

2. INTER_LINEAR 线性插值

默认插值方式。在线性插值中,目标像素坐标可能不是整数值。例如,缩放后坐标为 (10.5, 20.5),则会取四个邻近像素点的值进行加权求和:

D(x, y) = S(j, k) * w1 + S(j+1, k) * w2 + S(j+1, k+1) * w3 + S(j, k+1) * w4

权值 w1, w2, w3, w4 根据坐标的小数部分计算得出。

3. CV_INTER_AREA 区域插值

区域插值在图像放大时类似于线性插值,在图像缩小时可以有效防止像素波纹的出现。这种插值方式在保持图像细节的同时,减少失真。

4. INTER_CUBIC 三次样条插值

使用 4x4 邻域内像素进行双三次插值。这种方法在图像放大时可以有效保持细节。

5. INTER_LANCZOS4 Lanczos 插值

使用 8x8 像素邻域进行 Lanczos 插值。这种插值方式在图像放大时能有效减小模糊,保持高质量。

示例代码

以下是一个使用 resize 函数的示例:

#include 
#include
int main(int argc, char* argv[]){ std::string path = ""; int resize_height = 256; int resize_width = 256; cv::Mat src = cv::imread(path); cv::Mat dst; cv::resize(src, dst, cv::Size(resize_width, resize_height), (0, 0), (0, 0), cv::INTER_LINEAR); // 依据实际需求调整交替参数 return 0;}

以上代码示例展示了如何使用 resize 函数将图像调整到指定大小,并使用线性插值方式。

总结

resize 函数是 OpenCV 中常用的工具,适用于图像大小调整的场景。选择合适的插值方式能够显著影响最终图像质量,建议根据具体需求选择最优插值方法。

转载地址:http://ulsfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现阶乘递归factorialRecursive算法(附完整源码)
查看>>
Objective-C实现阿特巴希密算法(附完整源码)
查看>>
Objective-C实现随机图生成器算法(附完整源码)
查看>>
Objective-C实现随机数生成器(附完整源码)
查看>>
Objective-C实现随机森林算法(附完整源码)
查看>>
Objective-C实现随机正态分布快速排序算法(附完整源码)
查看>>
Objective-C实现随机生成一个 RxC 列联表(附完整源码)
查看>>
Objective-C实现隐藏任务栏(附完整源码)
查看>>
Objective-C实现隔离数字的小数部分, 取这个数字并从底数中减去它,返回结果算法(附完整源码)
查看>>
Objective-C实现雅可比迭代法算法(附完整源码)
查看>>
Objective-C实现雪花算法(附完整源码)
查看>>
Objective-C实现雪花飘落效果(附完整源码)
查看>>
Objective-C实现霍夫曼树(附完整源码)
查看>>
Objective-C实现霍纳法则(附完整源码)
查看>>
Objective-C实现非丰富数之和算法(附完整源码)
查看>>
Objective-C实现非并行奇偶转置排序算法(附完整源码)
查看>>
Objective-C实现香农编码(附完整源码)
查看>>
Objective-C实现马氏距离算法(附完整源码)
查看>>
Objective-C实现骑士旅游算法(附完整源码)
查看>>
Objective-C实现骑士旅游算法(附完整源码)
查看>>