Как использовать Neighborhood для использования всех каналов?

У меня есть изображение RGB в 2D.

Я хотел бы создать группы пикселей одного цвета (значение RGB); они читаются слева направо, а затем сверху вниз.

Когда текущий пиксель имеет значение RGB, отличное от предыдущего, это означает, что я нашел группу (содержащую предыдущие пиксели).

Я знаю, что есть функции CImg CImg_for2x2(img,x,y,z,c,I,T), но проблема в том, что они работают только на канале c, а меня интересует значение RGB. Документ: http://cimg.eu/reference/group__cimg__loops.html#lo6

Знаете ли вы, можно ли сказать «CImg», чтобы он понял, что я работаю со значением RGB, а не только со значением красного, например?


person JarsOfJam-Scheduler    schedule 08.10.2017    source источник


Ответы (1)


По вашему вопросу сложно сказать, но я думаю, что вы ищете "Анализ подключенных компонентов" или "маркировка".

Для этого используется инструмент CImg label().

Итак, если вы начнете с этого изображения, в котором есть 3 белых пятна:

введите здесь описание изображения

а затем запустите это:

#include <iostream>
#include "CImg.h"
using namespace std;
using namespace cimg_library;

int main(int argc, char** const argv)
{
    CImg<int> img("input.png");
    img.label(0,0);
    img.save_png("result.png");
}

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

введите здесь описание изображения

person Mark Setchell    schedule 10.10.2017
comment
Черная часть тоже идентифицирована? - person JarsOfJam-Scheduler; 11.10.2017
comment
Все черные пиксели помечены (то есть окрашены) как 0, поэтому они оказались черными. Все пиксели в верхнем левом пятне получили метку (то есть цвет) 1. Все пиксели в высокой полосе справа были помечены как 2. Все пиксели в большом квадрате были помечены как 3. Затем я normalised() (т. е. распределите значения по всей шкале от 0 до 255), изображение, которое нужно сделать 1, станет 85, 2 станет 170, а 3 станет 255. - person Mark Setchell; 11.10.2017