Я обрабатываю видео в OpenCV, которое, конечно, обрабатывает кадры как двумерные массивы. Я хотел бы итеративно искать в области вокруг определенного пикселя. Вместо того, чтобы выполнять итерацию по столбцу, а затем по строке, я хотел бы пройтись по значениям в виде квадратной змеи. Я постараюсь проиллюстрировать ниже.
X - это пиксель, с которого мы начинаем осматриваться.
000 100 110 111 111 111
0x0 > 0x0 > 0x0 > 0x0 > 0x1 > 0x1
000 000 000 000 000 001
Как вы можете видеть, он продолжит извиваться вокруг начальной точки, пока не достигнет столбца, с которого он начал. В этот момент он должен вытянуть еще одну колонку влево и начать движение вверх в массиве. Это не будет бесконечной итерацией, а скорее остановится, когда определенное количество угловых значений будет соответствовать заданному значению.
До сих пор я был в состоянии перебирать массив, однако я не уверен, как заставить его останавливаться в определенной точке, которая является динамической в течение жизни итерации.
def search_local_area(area, start_pt):
"""Search the area around the pixel identified as a 'good point' in a roundabout-square."""
test = np.zeros_like(area)
for row, _ in enumerate(area[..., start_pt]):
for column, value in enumerate(area[start_pt, ...]):
test[row, column] = value
Приведенный выше код просто копирует значения в тестовый массив, чтобы показать, что он повторяется в правильном направлении.