我正在寻找一个很棒的 C++ 库来进行基本的图像处理。我需要做的是能够将图像转换为灰度并有权读取图像的像素。
我看过 OpenCV、GIL、CImg 和 Magick++,但要么它们不太好,要么我不知道如何使用库将图像转换为灰度。
我正在寻找一个很棒的 C++ 库来进行基本的图像处理。我需要做的是能够将图像转换为灰度并有权读取图像的像素。
我看过 OpenCV、GIL、CImg 和 Magick++,但要么它们不太好,要么我不知道如何使用库将图像转换为灰度。
如果您要自己将颜色转换为灰度,通常不希望对三个通道赋予相同的权重。通常的转换是这样的:
灰色 = 0.3 * R + 0.6 * G + 0.1 * B;
显然,这些因素并不是一成不变的,但它们应该相当接近。
您可以通过更改因子来模拟不同颜色的滤镜——到目前为止,黑白摄影中最常见的滤镜是红色,这意味着增加红色并减少其他两个以保持总因子为 1.0(但保持 G:B比例约为 6:1 左右)。
CImg 可能是最容易使用的,不用安装它只是一个头文件
您还可以查看CxImage(C++ 图像处理和转换库)。
使用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]
...
}
你可以看看Paintlib
ITK是一个很棒的图像处理库。您可以使用 将 RGB 转换为灰度itk::RGBToLuminanceImageFilter
。