Библиотека для базовых манипуляций с изображениями в C ++ - PullRequest
7 голосов
/ 25 марта 2011

Я ищу отличную библиотеку C ++ для базовых манипуляций с изображениями. Что мне нужно сделать, так это уметь преобразовывать изображение в оттенки серого и иметь доступ для чтения пикселей изображения.

Я смотрел на OpenCV, GIL, CImg и Magick ++, но либо они были не слишком хороши, либо я не мог понять, как преобразовать изображение в оттенки серого с помощью библиотеки.

Ответы [ 6 ]

6 голосов
/ 25 марта 2011

Если вы собираетесь самостоятельно преобразовать цвет в оттенки серого, вы не обычно не хотите придавать одинаковый вес трем каналам.Обычное преобразование выглядит примерно так:

серый = 0,3 * R + 0,6 * G + 0,1 * B;

Очевидно, что эти факторы не записаны в камне, но они должны быть достаточно близки

Вы можете смоделировать фильтры разных цветов, изменив коэффициенты - безусловно, самый распространенный фильтр в черно-белой фотографии - красный, что означает увеличение красного и уменьшение двух других, чтобы сохранить общий коэффициент 1,0 (но сохраняйте соотношение G: B около 6: 1 или около того).

4 голосов
/ 25 марта 2011

CImg, вероятно, самый простой в использовании, без установки, это просто файл заголовка

1 голос
/ 25 марта 2011

Вы также можете взглянуть на CxImage (библиотека обработки и преобразования изображений C ++).

0 голосов
/ 25 марта 2011

ITK - отличная библиотека для обработки изображений. Вы можете конвертировать RGB в оттенки серого, используя itk::RGBToLuminanceImageFilter.

0 голосов
/ 25 марта 2011

Вы можете взглянуть на Paintlib

0 голосов
/ 25 марта 2011

Для грубых шагов сделать это с помощью 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] 
... 
}
...