Моя цель — отследить рисунки, в которых много отдельных фигур, и разбить эти фигуры на отдельные изображения. Это черное на белом.Я новичок в numpy, opencv & co, но вот моя текущая мысль:
Я не очень силен в таких вещах, есть ли лучший способ?
Сначала я попытался найти прямоугольную ограничительную рамку результатов водораздела (это более или менее коллаж примеров):
from numpy import *
import numpy as np
from scipy import ndimage
np.set_printoptions(threshold=np.nan)
a = np.zeros((512, 512)).astype(np.uint8) #unsigned integer type needed by watershed
y, x = np.ogrid[0:512, 0:512]
m1 = ((y-200)**2 + (x-100)**2 < 30**2)
m2 = ((y-350)**2 + (x-400)**2 < 20**2)
m3 = ((y-260)**2 + (x-200)**2 < 20**2)
a[m1+m2+m3]=1
markers = np.zeros_like(a).astype(int16)
markers[0, 0] = 1
markers[200, 100] = 2
markers[350, 400] = 3
markers[260, 200] = 4
res = ndimage.watershed_ift(a.astype(uint8), markers)
unique(res)
B = argwhere(res.astype(uint8))
(ystart, xstart), (ystop, xstop) = B.min(0), B.max(0) + 1
tr = a[ystart:ystop, xstart:xstop]
print tr
Каким-то образом, когда я использую исходный массив (a), то argwhere вроде работает, но после водораздел (res) он просто снова выводит полный массив.
Следующим шагом может быть нахождение многоугольника вокруг фигуры, но на данный момент ограничительная рамка будет отличной!
Пожалуйста, помогите!