2
Home
rune edited this page 2026-08-23 19:27:14 +00:00
Typehus producent tabel Aktive år Hustyper Referencer til byg
Byg
Adresser
Adresser til tjek
Hustype extract plantegning
Import cv2, numpy as np, sys
def load(p, maxdim=2600):
im = cv2.imread(p, cv2.IMREAD_GRAYSCALE)
s = maxdim / max(im.shape)
if s < 1: im = cv2.resize(im, None, fx=s, fy=s, interpolation=cv2.INTER_AREA)
return im
def ink(gray):
k = max(15, (min(gray.shape)//40)|1)
bg = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(k,k)))
norm = cv2.divide(gray, bg, scale=255)
norm = cv2.GaussianBlur(norm,(3,3),0)
_, th = cv2.threshold(norm, 0, 255, cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)
return th
def lines(mask, L):
H = cv2.morphologyEx(mask, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_RECT,(L,1)))
V = cv2.morphologyEx(mask, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_RECT,(1,L)))
return H, V
for p in sys.argv[1:]:
g = load(p)
m = ink(g)
L = max(15, int(0.012*max(g.shape)))
H,V = lines(m, L)
lm = cv2.bitwise_or(H,V)
print(p, g.shape, 'ink%', round(100*m.mean()/255,2), 'line%', round(100*lm.mean()/255,2), 'L',L)
cv2.imwrite(p+'.ink.png', 255-m)
cv2.imwrite(p+'.lines.png', 255-lm)
# cluster
d = cv2.dilate(lm, cv2.getStructuringElement(cv2.MORPH_RECT,(L,L)))
n, lab, stats, cent = cv2.connectedComponentsWithStats(d, 8)
boxes=[]
for i in range(1,n):
x,y,w,h,a = stats[i]
if a < 0.002*g.size: continue
boxes.append((a,x,y,w,h))
boxes.sort(reverse=True)
vis = cv2.cvtColor(g, cv2.COLOR_GRAY2BGR)
for a,x,y,w,h in boxes[:8]:
sub = lm[y:y+h, x:x+w]
closed = cv2.morphologyEx(sub, cv2.MORPH_CLOSE, np.ones((max(3,L//3),max(3,L//3)),np.uint8))
nn, ll, ss, cc = cv2.connectedComponentsWithStats(255-closed, 4)
cells = [ss[j][4] for j in range(1,nn) if 0.002*w*h < ss[j][4] < 0.35*w*h]
hv = H[y:y+h,x:x+w].sum()/max(1,V[y:y+h,x:x+w].sum())
print(f' box {x},{y} {w}x{h} cells={len(cells)} cellfill={sum(cells)/(w*h):.2f} H/V={hv:.2f}')
cv2.rectangle(vis,(x,y),(x+w,y+h),(0,0,255),3)
cv2.imwrite(p+'.boxes.png', vis)