Как улучшить скорость цикла в массиве? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть точки отрезка (x1, y1), (x2, y2), и у меня есть два разных разрешения изображения: a.255х480 б.848x480

Я хочу сгенерировать маску с координатой x в красной области на изображении b.

Я использую цикл for для генерации, есть ли эффективный метод?

def get_all_pts_on_line(x1, y1, x2, y2):
    points = []
    issteep = abs(y2-y1) > abs(x2-x1)
    if issteep:
        x1, y1 = y1, x1
        x2, y2 = y2, x2
    rev = False
    if x1 > x2:
        x1, x2 = x2, x1
        y1, y2 = y2, y1
        rev = True
    deltax = x2 - x1
    deltay = abs(y2-y1)
    error = int(deltax / 2)
    y = y1
    ystep = None
    if y1 < y2:
        ystep = 1
    else:
        ystep = -1
    for x in range(x1, x2 + 1):
        if issteep:
            points.append((y, x))
        else:
            points.append((x, y))
        error -= deltay
        if error < 0:
            y += ystep
            error += deltax
    # Reverse the list if the coordinates were reversed
    if rev:
        points.reverse()
    return points

line_pts = get_all_pts_on_line(x1, y1, x2, y2)

for pt in line_pts:
            for i in range(pt[0]):
                image_b[pt[1],:][image_a[pt[1], :]==i] = 0

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...