Russian Qt Forum

Программирование => Алгоритмы => Тема начата: uriel от Март 31, 2009, 11:58



Название: Разбить картинку на регионы
Отправлено: uriel от Март 31, 2009, 11:58
Возникла следующая задачка: есть двухцветная картинка, разделённая линиями на замкнутые регионы (например, карта). Так вот нужно получить массив этих самых регионов.
Может кто-нибудь подсказать, как это можно сделать наиболее быстрым образом? Заранее спасибо.


Название: Re: Разбить картинку на регионы
Отправлено: Авварон от Апрель 04, 2009, 23:23
есть кривоватый алгоритм поиска связных областей... перебирая пиксели картинки возможно 4 случая:
Код:
	        if (image -> pixel(x - 1, y - 1) == qRgb(0, 0, 0)) //граница, условно черного цвета
continue;//areas[x][y] = 0;
else if (areas[x][y - 1] == 0 && areas[x - 1][y] == 0)
areas[x][y] = ++curarea;
else if (areas[x][y - 1] != 0 && areas[x - 1][y] == 0)
areas[x][y] = areas[x][y - 1];
else if (areas[x][y - 1] == 0 && areas[x - 1][y] != 0)
areas[x][y] = areas[x - 1][y];
else if (areas[x][y - 1] != 0 && areas[x - 1][y] != 0)
в последнем случае - коллизия 2х уже заполненных областей и их нужно склеить в одну. Алгоритм простой, но медленный.