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