用于C ++的基本图像处理库

7
我正在寻找一个优秀的C++库来进行基础图像处理。我需要完成以下任务:将图像转换为灰度,并能够读取图像像素。
我已经看过OpenCV、GIL、CImg和Magick++,但要么它们不是特别好,要么我无法通过这些库将图像转换为灰度。

如果你愿意尝试除了C++之外的其他语言,那么Processing http://processing.org/是绝对适合图像处理的超棒语言! - Nav
6个回答

6
如果你要自己将彩色转换为灰度图像,通常不应该给三个通道相同的权重。通常的转换方法如下所示:
灰度值 = 0.3 * 红色值 + 0.6 * 绿色值 + 0.1 * 蓝色值;
显然这些因子不是固定的,但应该相当接近。
通过改变这些因子,您可以模拟不同颜色的过滤器 - 在黑白摄影中最常见的过滤器是红色,这意味着增加红色并减少其他两种颜色以保持总因子为1.0(但保持绿:蓝比例约为6:1)。

我暂时决定使用以下数值:0.3、0.59、0.11。 - chrisbuchholz

4

CImg可能是最容易使用的,无需安装它,只需要一个头文件。


是的,一旦我发现CImg对象具有的数据运算符,就一直使用它。 它使我能够通过x、y、z、v值轻松创建图像:http://cimg.sourceforge.net/reference/structcimg__library_1_1CImg.html#a567d0f7b9c743a42958cfce84f8d432f - chrisbuchholz
此外,CImg将图像存储为平面颜色(红色图像后跟绿色、蓝色),这对于显示来说很麻烦,但使得提取每个颜色平面非常容易。 - Martin Beckett

1
你也可以看一下CxImage(C++图像处理和转换库)。

0

使用Cimg进行大致步骤如下:

#include "CImg.h"
using namespace cimg_library;
...
{
...
CImg<unsigned char> image("source.jpg") //[load jpg][2] needs ImageMagick
cimg_for(img,ptr,float) { *ptr=0; }      //[Loop][3] over every pixel, eg this method equivalent to 'img.fill(0);'
save_jpeg (const char *const filename, const unsigned int quality=100) //[save as a jpg][4] 
... 
}

0

0

ITK 是一款非常出色的图像处理库。你可以使用 itk::RGBToLuminanceImageFilter 将 RGB 转换成灰度图像。


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