C++图像处理:CImg、OpenCV和Magick++库

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

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

开始课程

C++图像处理:库概述与实践示例



数字图像处理是现代编程的关键任务之一。C++中有几个强大的库,可以加载、修改、分析和保存图像。在本文中,我们将介绍三种最流行的工具:CImg(轻量且简单)、OpenCV(计算机视觉的行业标准)和GraphicsMagick(用于高性能转换)。



1. CImg — 用于基本操作的轻量级库



CImg(C++模板图像处理库)是一个头文件库,无需安装额外的DLL。它非常适合学习项目和快速原型开发。支持BMP、PNG、JPEG、TIFF格式(通过外部编解码器)。



安装

只需下载CImg.h文件并将其包含到项目中。要处理JPEG/PNG,还需要libjpeg、libpng和zlib。



示例:加载、颜色反转和保存

#include "CImg.h"using namespace cimg_library;

int main() { // 加载图像 CImg<unsigned char> img("input.jpg"); // 反转颜色(像素 = 255 - 像素) CImg<unsigned char> inverted = 255 - img; // 应用高斯模糊(半径3) CImg<unsigned char> blurred = img.get_blur(3); // 保存结果 inverted.save("inverted.jpg"); blurred.save("blurred.jpg"); return 0;}


2. OpenCV — 强大的计算机视觉框架



OpenCV(开源计算机视觉库)是识别、目标检测和复杂图像处理任务的事实标准。支持数百种算法、视频处理、神经网络。它是跨平台的。



安装

在Ubuntu上:sudo apt install libopencv-dev。在Windows上——通过vcpkg或官方安装程序。



示例:边缘检测(Canny)和调整大小

#include <opencv2/opencv.hpp>using namespace cv;

int main() { // 读取图像 Mat img = imread("photo.jpg"); if (img.empty()) return -1; // 转换为灰度 Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); // 使用Canny算法进行边缘检测 Mat edges; Canny(gray, edges, 50, 150); // 调整大小为300x300 Mat resized; resize(img, resized, Size(300, 300)); // 保存和显示 imwrite("edges.jpg", edges); imshow("Original", img); waitKey(0); return 0;}


3. GraphicsMagick — 快速转换和批量处理



GraphicsMagick 是ImageMagick的一个分支,专注于稳定性和性能。用于批量转换、调整大小、水印。支持超过200种格式。



安装

通过包管理器:sudo apt install graphicsmagick。对于C++,需要libgraphicsmagick++-dev库。



示例:缩小图像并转换为PNG

#include <Magick++.h>using namespace Magick;

int main() { InitializeMagick(nullptr); // 加载图像 Image image("input.tiff"); // 将宽度缩放至800像素 image.scale(Geometry("800x")); // 旋转90度 image.rotate(90); // 设置JPEG质量(如果输出格式为JPEG) image.quality(85); // 保存为PNG image.write("output.png"); return 0;}


库比较

  • CImg — 简单入门,最少

推荐