使用OpenCV在C++中进行图像处理:调整大小(resize)和裁剪(crop)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

使用OpenCV在C++中进行图像处理:调整大小(resize)和裁剪(crop)

在现代计算机图形学和计算机视觉中,调整图像大小(resize)和裁剪(crop)是基础操作。无论您是在开发照片处理应用程序、人脸识别系统,还是仅仅想为神经网络准备图像,都离不开这些功能。本文将详细介绍如何使用强大的OpenCV库在C++语言中执行resize和crop操作。



为什么选择OpenCV?

OpenCV(开源计算机视觉库)是计算机视觉任务的事实标准。它采用C/C++编写,提供了数百种优化算法。对于resize和crop操作,我们只需要几个函数,但它们的性能和灵活性使OpenCV成为理想的选择。

您可以通过包管理器(例如vcpkg install opencv或brew install opencv)安装OpenCV,或者从源代码编译。安装细节不在本文讨论范围内,但假设您已经配置好了包含该库的项目。



准备工作:加载图像

在进行任何操作之前,需要先加载图像。在OpenCV中,使用imread()函数完成:

#include <opencv2/opencv.hpp>#include <iostream>

using namespace cv;using namespace std;

int main() { // 加载图像 Mat image = imread("input.jpg"); if (image.empty()) { cerr << "图像加载失败!" << endl; return -1; } cout << "原始图像尺寸: " << image.cols << " x " << image.rows << endl; return 0;}

该函数返回一个Mat(矩阵)类型的对象。如果文件未找到或损坏,image.empty()将返回true。



在C++中调整图像大小(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 — 新尺寸(宽度,高度)。可以显式指定,也可以通过fx和fy计算得出。
  • fx — 宽度缩放因子(如果dsize = Size())。
  • fy — 高度缩放因子。
  • interpolation — 插值方法。主要选项:
    • INTER_NEAREST — 最近邻插值(速度快,但有伪影)。
    • INTER_LINEAR — 双线性插值(默认,平衡性好)。
    • INTER_CUBIC — 双三次插值(速度较慢,但质量更高)。
    • INTER_AREA — 用于缩小图像(像素区域关系)。


示例1:缩小到固定尺寸

Mat resized;Size newSize(300, 200); // 宽度300,高度200resize(image, resized, newSize, 0, 0, INTER_AREA);imwrite("resized_fixed.jpg", resized);cout << "调整大小后的尺寸: " << resized.cols << " x " << resized.rows << endl;


示例2:按比例缩放2倍

Mat scaled;resize(image, scaled, Size(), 0.5, 0.5, INTER_LINEAR);imwrite("scaled_half.jpg", scaled);

如果指定dsize = Size(),则新尺寸根据公式计算:dsiz

推荐