У меня есть точки отрезка (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