使用 OpenCV 库在 C++ 中进行图像处理:resize 和 crop

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

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

开始课程

使用 OpenCV 在 C++ 中进行图像处理:resize 和 crop



在现代应用开发中,尤其是在计算机视觉、网页抓取或媒体文件处理领域,经常需要以编程方式调整图像大小(resize)和裁剪图像(crop)。C++ 语言结合强大的 OpenCV 库为此提供了所有必要的工具。本文将详细讲解如何执行这些操作,哪些参数会影响结果质量,并提供现成的代码示例。



OpenCV 库——C++ 图像处理的事实标准



OpenCV(开源计算机视觉库)是一个跨平台的开源库,包含数百个用于图像和视频处理的优化算法。它使用 C++ 编写,并具有 Python、Java 等语言的绑定。对于 C++ 而言,OpenCV 是性能最高、功能最全面的解决方案。



OpenCV 在 resize 和 crop 任务中的主要优势:

  • 高速——所有函数都使用 SIMD 指令和多线程。
  • 灵活性——支持多种插值方法(双线性、双三次、Lanczos 等)。
  • 便捷性——通过 cv::Mat 类处理图像,该类可自动管理内存。


为 C++ 安装 OpenCV

首先需要安装该库。最常见的方法是通过 vcpkg 包管理器或从源代码编译。通过 vcpkg 安装的示例:

git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh./vcpkg install opencv4


安装后,在您的 CMakeLists.txt 中链接该库:

find_package(OpenCV REQUIRED)target_link_libraries(your_project ${OpenCV_LIBS})


调整图像大小(resize)

cv::resize() 函数允许将原始图像的大小调整为指定的宽度和高度。语法如下:

cv::resize(    InputArray src,      // 原始图像    OutputArray dst,     // 结果图像    Size dsize,          // 新尺寸(宽度,高度)    double fx = 0,       // X 方向缩放比例(如果未指定 dsize)    double fy = 0,       // Y 方向缩放比例    int interpolation = INTER_LINEAR  // 插值方法);


interpolation 参数决定了用于计算新像素的算法。主要选项:

  • INTER_NEAREST——最近邻插值(速度快,但质量低)。
  • INTER_LINEAR——双线性插值(速度与质量的良好平衡)。
  • INTER_CUBIC——双三次插值(质量更高,但速度较慢)。
  • INTER_LANCZOS4——Lanczos 插值(放大时质量最佳)。


使用双三次插值将图像放大 2 倍的示例:

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

int main() { cv::Mat src = cv::imread("input.jpg"); if (src.empty()) { std::cerr << "无法加载图像" << std::endl; return -1; }

cv::Mat dst; cv::resize(src, dst, cv::Size(), 2.0, 2.0, cv::INTER_CUBIC);

cv::imwrite("output_resized.jpg", dst); std::cout << "图像已放大并保存" << std::endl; return 0;}


裁剪图像(crop)

OpenCV 中没有专门的裁剪函数。相反,它使用 感兴趣区域(ROI) 机制——在图像上选择一个矩形区域。这可以通过 () 运算符或 cv::Mat::operator() 方法实现。



裁剪语法

推荐