44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
expand_skeleton.py
|
|
Rasterize Manhattan polylines (JSON) back to a binary layout image.
|
|
"""
|
|
import argparse
|
|
from pathlib import Path
|
|
import json
|
|
import numpy as np
|
|
import cv2
|
|
|
|
|
|
def draw_polylines(polylines, shape, line_width=3):
|
|
h, w = shape
|
|
img = np.zeros((h, w), dtype='uint8')
|
|
for pl in polylines:
|
|
if len(pl) < 2:
|
|
continue
|
|
pts = [(int(x), int(y)) for x,y in pl]
|
|
for i in range(len(pts)-1):
|
|
p0 = pts[i]
|
|
p1 = pts[i+1]
|
|
cv2.line(img, p0, p1, color=255, thickness=line_width)
|
|
return (img > 127).astype('uint8')
|
|
|
|
|
|
def main():
|
|
p = argparse.ArgumentParser()
|
|
p.add_argument('polyjson')
|
|
p.add_argument('outpng')
|
|
p.add_argument('--line-width', type=int, default=3)
|
|
args = p.parse_args()
|
|
|
|
data = json.load(open(args.polyjson,'r'))
|
|
polylines = data.get('polylines', [])
|
|
shape = tuple(data.get('shape', [512,512]))
|
|
img = draw_polylines(polylines, shape, line_width=args.line_width)
|
|
cv2.imwrite(args.outpng, img*255)
|
|
print('Wrote', args.outpng)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|