【发布时间】:2011-03-16 08:48:05
【问题描述】:
我想遍历jpg 格式图像中的每个像素颜色,
我应该参考哪个库来做到这一点,以便代码尽可能短?
【问题讨论】:
标签: c++ c image-processing
我想遍历jpg 格式图像中的每个像素颜色,
我应该参考哪个库来做到这一点,以便代码尽可能短?
【问题讨论】:
标签: c++ c image-processing
jpeglib 是一个非常方便的 jpeg 库。
【讨论】:
我可以想到ImageMagick 或CImg。这是给你的CImg tutorial。他们抽象了很多解压细节,只是给你一个可以使用的网格。
如果你使用 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;
【讨论】:
用于访问像素级信息。 libjpeg 和 JAI Image I/O 工具应该足够了。 JAI 提供的高级图像处理框架不止于此。所有选项都允许您将像素读/写到图像文件。
libjpeg 在 C/C++ 中。它适用于 Linux 和 Window。我之前在 Linux 中使用过它,它运行良好。但是,如果您想处理其他图像类型,您可能需要获取其他包并学习其他 API 接口。
Java 高级成像 (JAI) 图像 I/O 工具 记得下载平台特定的java包,因为不同的系统有特定的优化。它不仅涵盖 JPG,还涵盖具有完全相同 API 接口的其他图像格式。
Java 高级成像 (JAI) 如果您打算进行更高级的处理,例如使用图像运算符和过滤器,则可以使用它。这是一个提供比 JAI Image I/O Tools 更高级别功能的包。
编辑:按照建议删除 1、2 和 3
【讨论】:
我会使用 Allegro 游戏库 http://liballeg.org/Allegro 它很简单/开源/免费/多平台,如果你愿意,你可以逐像素迭代
【讨论】:
Qt 有一个QImage 类:
QImage i("input.jpg");
int x, y;
for (y = 0; < i.height(); ++y) {
for (x = 0; x < i.width(); ++x) {
doSomethingWith(i.pixel(x, y));
}
}
【讨论】:
试试FreeImage,它看起来很通用,很多项目都在使用它。
【讨论】: