C++ 图像处理库

26

我正在寻找一款用于图像处理的C++库。 我需要该库对PPM照片(彩色照片)进行阈值处理。 我应该自己编写代码吗?你们怎么看?

7个回答

15

Magick++可能会有所帮助。它是ImageMagick的库版本。


13

上述所有选项都应该能够满足您的要求。

我想将OpenCV添加到列表中。它是一个快速的跨平台计算机视觉库,具有广泛的图像加载、保存和处理支持。它是用C语言编写的,但它有一个坚实的C++接口,我过去曾经使用过。

话虽如此:读取/写入PPM文件非常简单,所以如果你只需要读取和阈值化,那么你一定要考虑自己来做。它将归结为将PPM字节读入内存,通过对RGB颜色通道求平均值将其转换为灰度(请注意,对RGB通道求平均值是一种非常简单的灰度化方法;还有其他方法),然后进行阈值化并写入。


12
你可以使用Boost GIL库。它非常强大和灵活,实际上可能适合你的所有需求(嗯,是的,它是boost :))。

2
请更新 Boost GIL 的链接,使其始终指向当前版本。 - Benjamin Buch

9
Simd库是一个免费开源的图像处理库,专为C和C++程序员设计。它提供了许多有用的高性能图像处理算法,如像素格式转换、图像缩放和过滤、从图像中提取统计信息、运动检测、对象检测(HAAR和LBP分类器级联)和分类、神经网络等。
这些算法使用不同的SIMD CPU扩展进行优化。特别是该库支持以下CPU扩展:x86 / x64的SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX、AVX2和AVX-512,PowerPC的VMX(Altivec)和VSX(Power7),ARM的NEON。
Simd库具有C API,并且还包含有用的C++类和函数来方便访问C API。该库支持动态和静态链接,32位和64位的Windows和Linux,MSVS,G ++和Clang编译器,MSVS项目和CMake构建系统。
附言:我参与了这个项目的开发。

这个库看起来很不错!你也是作者吗?如果是的话,你应该在回答中提到它(参见隶属关系披露)。 - Erik Sjölund
我不知道这个规则。 - ErmIg
Simd库是否有任何功能可以将两个图像垂直组合在一起,使得(500x500, 500x500)变成(500x1000)?我还没有学习C++,正在寻找一个可以做到这一点的库(用于Android)。你能帮忙吗? - rupinderjeet
3
当然,Simd库可以实现这个功能:Simd :: Copy(a,c.Region(0,0,500,500).Ref()); Simd :: Copy(b,c.Region(0,500,1000,500).Ref()); - ErmIg

6

CImg库也是一个受欢迎的选择。它非常简单易用,轻量级且已经实现了许多基本和高级图像处理算子。


4

非常好的库是GD2

这个库有多种语言的绑定,包括 C(当然与 C++ 兼容)。使用任何 C++ 编译器都可以轻松地将 GD 构建为静态或动态库,包括 GCC 和 Visual C++,也可以通过互联网获取预编译的二进制文件。 与 Boost 图像库不同的是,它允许从内存中加载/保存图像,而不仅限于硬盘。


2
我相信Boost GIL也允许对内存进行读写操作。 - jiggunjer

4

我想将VIPS添加到列表中。该库特别适用于拥有多个CPU的机器。如需比较,请参见这里的基准测试


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