如何用C/C++最简单地处理JPG图像?

8
我想迭代遍历jpg格式图像中的每个像素颜色,应该参考哪个库来使代码尽可能简短?
6个回答

15

我认为可以选择使用ImageMagick或者CImg。这里有一个CImg教程。它们抽象了很多解压细节,只需给您一个网格来工作。

如果您选择使用CImg,则只需要使用data调用。您可以尝试像这样做:

CImg<unsigned char> src("image.jpg");
int width = src.width();
int height = src.height();
unsigned char* ptr = src.data(10,10); // get pointer to pixel @ 10,10
unsigned char pixel = *ptr;

如何获取宽度和高度? - user198729
我修改了示例,以向您展示如何检索高度/宽度。 - NG.
1
ImageMagick是一个命令行工具。如果您希望构建独立应用程序,它可能不太适合。然而,我对CImg并不熟悉。 - ttchong
6
ImageMagick还提供了一组API,您可以链接到其中。请查看Magick++。我自己也尝试过。 - NG.
@SB - 刚从你这里得知,我会尝试一下。 - ttchong
@SB,我尝试运行程序时出现了“调试错误!”的提示,你能看看哪里有问题吗?http://stackoverflow.com/questions/3270489/why-i-got-a-run-time-debug-error-with-this-cimg-app-built-with-cmake - user198729

4

Qt有一个QImage类:QImage

QImage i("input.jpg");
int x, y;
for (y = 0; &lt; i.height(); ++y) {
   for (x = 0; x &lt; i.width(); ++x) {
      doSomethingWith(i.pixel(x, y));
   }
}

1

我会使用 Allegro 游戏库http://liballeg.org/Allegro,它简单易用、开源免费、跨平台,并且可以逐像素迭代。


0

jpeglib是一个非常方便的库,可以用来处理JPEG图像。


0

如果需要访问像素级别的信息,libjpeg和JAI Image I/O工具应该就足够了。JAI提供了比这更高级的图像处理框架。所有选项都允许您读写图像文件中的像素。

libjpeg 使用C/C++编写。它适用于Linux和Windows。我以前在Linux上使用过它,效果很好。但是,如果您想处理其他类型的图像,则可能需要获取其他软件包并学习另一个API接口。

Java Advanced Imaging(JAI) Image I/O Tools 记得下载特定于平台的Java软件包,因为不同系统有特定的优化。它不仅涵盖JPG,还涵盖其他图像格式,并具有完全相同的API接口。

Java Advanced Imaging(JAI) 如果您计划进行更高级别的处理,例如使用图像运算符和滤镜,则可以使用此工具包。这是一个提供比JAI Image I/O工具更高级功能的软件包。

编辑:根据建议删除1、2和3。


答案没有固定的顺序显示,因此引用其他答案时使用 #1、#2、#3 等方式会令人困惑。最好的方法是要么概括回答(例如框架名称),要么标明回答者以便识别其他答案。更好的做法是链接其他答案。 - Ben Voigt

0

试试FreeImage,它似乎非常通用,许多项目都在使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接