Хочу сделать заливку на изображении, как в пейнте. Чтобы закрашивались все пиксели такого же цвета, как на выбранном (пока что сравниваю только один канал). На изображении размером 30*30 все работает хорошо.
Но как только я хочу сделать тоже самое с картинкой размером 480*740, то процесс выполняется очень долго. Я проверил скорость выполнения, она постоянная, каждая вершина обрабатывается одинаковое количество времени.
Вот сам обход, без рекурсии:
Код
def dfs_not_recursion(self):
while (self.stack != []):
peak_vertex = self.stack.pop()
if (peak_vertex is not None):
if (not self.is_visited_boolean(peak_vertex)):
self.visited_boolean[peak_vertex.y][peak_vertex.x] = True
if (self.img[peak_vertex.y][peak_vertex.x][0] == self.start_vertex.color[0]):
self.img_draw[peak_vertex.y][peak_vertex.x] = self.GREEN
neighbours = peak_vertex.get_neighbours(self.img)
for i in neighbours:
self.stack.append(i)
Изображение img - исходник, img_draw - то, на котором рисовать.
Почему в пэйнте обработка большого изображения занимает миллисекунды, а здесь - минуты?