在C++中处理图像:CImg库与STB Image库

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

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

开始课程

在C++中处理图像:CImg库与STB Image库

图像处理是计算机图形学、计算机视觉和网络技术中的关键任务之一。C++本身没有内置的位图图像处理工具,但存在许多第三方库。本文将介绍两个流行且易于使用的库:CImg(用于高级处理)和STB Image(用于快速加载/保存常见格式)。



1. CImg:通用的图像处理库

CImg(C++模板图像处理库)是一个仅头文件(header-only)库,提供了丰富的图像加载、显示、滤波和分析功能。它支持BMP、JPEG、PNG、TIFF等格式(需要额外库如libpng、libjpeg的支持)。



安装与配置

从官方网站下载最新版本。然后只需包含头文件:

#include "CImg.h"using namespace cimg_library;


CImg基本操作

以下示例演示了加载、调整大小和应用高斯滤波:

#include "CImg.h"#include <iostream>

int main() { // 加载图像(支持BMP、JPG、PNG等) CImg<unsigned char> img("input.jpg"); // 调整大小为400x300 CImg<unsigned char> resized = img.resize(400, 300); // 应用高斯模糊(半径3) CImg<unsigned char> blurred = resized.get_blur(3.0f); // 保存结果 blurred.save("output.jpg"); std::cout << "图像处理完成!" << std::endl; return 0;}


CImg的其他功能

  • 滤镜:模糊、锐化、中值滤波、形态学操作。
  • 色彩转换:转换为灰度、HSV、Lab色彩空间。
  • 直方图:绘制和均衡化。
  • 绘图:在图像上绘制线条、圆形、文字。
  • 显示:内置显示窗口(Linux需X11支持,Windows需WinAPI支持)。


2. STB Image:快速加载与保存

STB Image 是Sean Barrett开发的一组单头文件库,用于读取/写入PNG、JPG、BMP、GIF等格式的图像。主要优势在于简洁和速度。无需安装,只需包含stb_image.h和stb_image_write.h文件。



配置

从GitHub下载文件。使用时,在恰好一个.cpp文件中定义宏STB_IMAGE_IMPLEMENTATION:

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"

#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"


示例:加载PNG并保存为JPG

#include <iostream>

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"

int main() { int width, height, channels; // 加载图像(返回RGB/RGBA格式的像素数组) unsigned char* img = stbi_load("input.png", &width, &height, &channels, 3); if (!img) { std::cerr << "图像加载失败!" << std::endl; return -1; } // 保存为JPEG,质量90 stbi_write_jpg("output.jpg", width, height, 3, img, 90); // 释放内存 stbi_image_free(img); std::cout << "转换完成!" << std::endl; return 0;}

推荐