|
import cv2 |
|
import svgwrite |
|
import colorsys |
|
|
|
|
|
def plot_preds(image, corners, edges): |
|
for line in edges: |
|
cv2.line(image, tuple(line[:2]), tuple(line[2:]), (255, 255, 0), 2) |
|
for c in corners: |
|
cv2.circle(image, (int(c[0]), int(c[1])), 3, (0, 0, 255), -1) |
|
return image |
|
|
|
|
|
def random_colors(N, bright=True, same=False, colors=None): |
|
brightness = 1.0 if bright else 0.7 |
|
if colors is None or same: |
|
if same: |
|
hsv = [(0, 1, brightness) for i in range(N)] |
|
else: |
|
hsv = [(i / N, 1, brightness) for i in range(N)] |
|
else: |
|
hsv = [(colors[i], 1, brightness) for i in range(N)] |
|
colors = list(map(lambda c: colorsys.hsv_to_rgb(*c), hsv)) |
|
return colors |
|
|
|
|
|
def svg_generate(image_link, corners, edges, name, size=512): |
|
dwg = svgwrite.Drawing(name + '.svg', size=('{}'.format(size), '{}'.format(size))) |
|
shapes = dwg.add(dwg.g(id='shape', fill='black')) |
|
|
|
shapes.add(dwg.image(href=image_link, size=(size, size))) |
|
|
|
scale = size / 256 |
|
for i, edge in enumerate(edges): |
|
x = edge[:2] * scale |
|
y = edge[2:] * scale |
|
shapes.add(dwg.line((int(x[0]), int(x[1])), (int(y[0]), int(y[1])), |
|
stroke="#EE6507", stroke_width=3*scale, opacity=0.7)) |
|
|
|
for i, corner in enumerate(corners): |
|
shapes.add(dwg.circle((int(corners[i][0] * scale), int(corners[i][1]) * scale), r=4*scale, |
|
stroke='green', fill='white', stroke_width=2*scale, opacity=0.8)) |
|
return dwg |
|
|