C ++, как загружать изображения и считать пиксели определенных цветов - PullRequest
0 голосов
/ 01 октября 2010

вот моя проблема:

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

Я провел некоторые исследования, но не нашел ничего особенно полезного. DevIL выглядит хорошим вариантом, но я не уверен, с чего начать.

Вот немного псевдокода C ++ / python, надеюсь, иллюстрирующего то, что я пытаюсь сделать:

for image in folder:

    A = 0;
    B = 0;

    for pixel in image:

        if (pixel == colourA) {A++}
        if (pixel == colourB) {B++}

    //Output the count of colours for each image
    outputToFile(A, B);

У кого-нибудь есть советы о том, с чего начать?

Спасибо

РЕДАКТИРОВАТЬ Дополнительная информация: я использую Windows 7 и все изображения .pngs

РЕДАКТИРОВАТЬ2 У меня все работает, кроме фактического определения цвета текущего пикселя.В настоящее время я использую это:

int blue = ((uchar *)(img->imageData + pixelX*img->widthStep))[pixelY*img->nChannels + 0];

Но это не работает, и я понятия не имею, как это работает.Я не смог найти ничего об этом, что мог бы понять.Может ли кто-нибудь указать мне правильное направление, как найти значения RGB для определенного пикселя?

Edit3 Готово!Для тех, кто считает, что пытается сделать нечто подобное, большинство моих оставшихся вопросов и немного кода можно найти здесь .Спасибо за помощь!

Ответы [ 4 ]

2 голосов
/ 01 октября 2010

Вам стоит взглянуть на OpenCV.

0 голосов
/ 01 октября 2010

Определенно взгляните на OpenCV , потому что когда вам понадобится больше места для перемещения, тогда OpenCV позволит вам выполнять гораздо больше задач компьютерного зрения. И используйте boost :: filesystem , чтобы сделать код «для каждого изображения в директории».

Обратите внимание, что функция cv :: compare в основном уже выполняет за вас половину работы ... Я позволю вам прочесть это и наслаждаться использованием OpenCV API.

0 голосов
/ 01 октября 2010

В SDL есть несколько полезных элементов управления пикселями.

http://www.libsdl.org/

Это также очень чисто.

0 голосов
/ 01 октября 2010

Зависит от платформы и формата изображения. В Windows изображения BMP поддерживаются изначально (т. Е. В API). ImageMagick - это кроссплатформенная библиотека, довольно универсальная, которая подходит для любого формата, но она тяжелая. Qt также имеет некоторую обработку изображений - ограниченную наиболее распространенными форматами.

...