Как выделить область изображения по цвету?

107
25 января 2022, 01:00

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

Есть ли какой-нибудь проект с открытым исходным кодом не слишком большого размера, чтобы его можно было подсмотреть?

Answer 1

В итоге, разобрался сам. Это можно сделать применив рекурсивную функцию, осуществляющую осмотр соседних клеток, игнорируя обработанные.

void Worker::fill(QPoint point) {
    QColor pointColor = QColor(image.pixel(point));
    if (ignore.contains(point)) {
        return;
    } else if (compare(templColor, pointColor)) {
        ignore.insert(point);
        image.setPixelColor(point.x(), point.y(), fillColor);
        QList<QPoint> bounding = border(point);
        QList<QPoint>::iterator iter;
        for (iter = bounding.begin(); iter != bounding.end(); iter++) {
            fill(*iter);
        }
    } else {
        return;
    }
}

Уже осмотренные клетки заносятся в ignore. Это контейнер вида множество, именно его применение позволяет избежать зацикливания на повторах. Полные исходный код выложил в свободный доступ в этом репозитории.

READ ALSO
Upper_bound для pair

Upper_bound для pair

Язык: С++

115
Как вызвать название переменной в #define?

Как вызвать название переменной в #define?

Я хочу чтобы при вызове

172
Как установить кодировку для консоли в Qt?

Как установить кодировку для консоли в Qt?

В WinAPI есть функция SetConsoleOutputCP(1251) которая меняет кодировку консолиЕсть ли аналог данной функции в Qt ?

98
Как заменить delay()?

Как заменить delay()?

Есть 4 метода Clock();Data();Temp();Hum();Кусочек кода надо сделать без delay()

202