- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
resize 函数调整图像 src 的大小,使其缩小或放大至指定的大小。需要注意的是,初始的 dst 类型或大小不被考虑。相反,大小和类型是从 src, dsize, fx, 和 fy 推导出来的。如果你想调整 src 的大小,使其适合预创建的 dst,你可以按照以下方式调用函数:
// 明确指定 dsize = dst.size(); fx 和 fy 将从该值计算得出。
resize(src, dst, dst.size(), 0, 0, interpolation);
如果你想要在每个方向上将图像缩小一半,你可以按照以下方式调用函数:
// 指定 fx 和 fy,并让函数计算出目标图像的大小。
resize(src, dst, Size(), 0.5, 0.5, interpolation);
为了缩小图像,通常使用 INTER_AREA 插值方法会看起来最好,而为了放大图像,通常使用 INTER_CUBIC(较慢)或 INTER_LINEAR(较快但仍看起来不错)插值方法会看起来最好。
函数原型
void cv::resize
(
InputArray src,
OutputArray dst,
Size dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR
)
参数
- 参数 src 输入图像。
- 参数dst 输出图像;它具有 dsize(当非零时)的大小或从 src.size(), fx, 和 fy 计算出的大小;dst 的类型与 src 相同。
- 参数dsize 输出图像的大小;如果它等于零(在Python中为 None),则计算为: dsize = Size(round(fx*src.cols), round(fy*src.rows)) \texttt{dsize = Size(round(fx*src.cols), round(fy*src.rows))} dsize = Size(round(fx*src.cols), round(fy*src.rows))或者 fx 和 fy 必须是非零的。
- 参数fx 沿水平轴的缩放比例;当它等于0时,计算为 (double)dsize.width/src.cols \texttt{(double)dsize.width/src.cols} (double)dsize.width/src.cols
- 参数fy 沿垂直轴的缩放比例;当它等于0时,计算为 (double)dsize.height/src.rows \texttt{(double)dsize.height/src.rows} (double)dsize.height/src.rows。
- 参数interpolation 插值方法,参见 InterpolationFlags。
代码示例
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// 读取图像
Mat image = imread("/media/dingxin/data/study/OpenCV/sources/images/fruit_small.jpg", IMREAD_COLOR);
if (image.empty()) {
std::cerr << "Error: Could not open or find the image." << std::endl;
return -1;
}
// 设置输出图像的大小
Size dsize(300, 300); // 输出图像的宽度和高度
// 创建输出图像
Mat resizedImage;
// 调整图像大小
resize(image, resizedImage, dsize, 0, 0, INTER_LINEAR);
// 显示结果
namedWindow("Original Image", WINDOW_NORMAL);
imshow("Original Image", image);
namedWindow("Resized Image", WINDOW_NORMAL);
imshow("Resized Image", resizedImage);
waitKey(0);
return 0;
}