У меня есть этот вид белого и черного изображений, и я хотел бы сохранить каждую белую фигуру в изображение, которое соответствует ее размеру.
Я использую connectedComponentsWithStats()
вчтобы пометить связанные области, а затем я использую прямоугольник, поглощающий область, чтобы извлечь ее и сохранить отдельно.
img = imread('shapes.png', IMREAD_GRAYSCALE)
_ , img = threshold(img,120,255,THRESH_BINARY)
n_labals, labels, stats, centroids = connectedComponentsWithStats(img)
for label in range(1,n_labals):
width = stats[label, CC_STAT_WIDTH]
height = stats[label, CC_STAT_HEIGHT]
x = stats[label, CC_STAT_LEFT]
y = stats[label, CC_STAT_TOP]
roi = img[y-5:y + height+5, x-5:x + width+5]
pyplot.imshow(roi,cmap='gray')
pyplot.show()
Однако, таким образом, у меня есть некоторые пересечения между фигурами, как показано здесь
Я бы хотел, чтобы каждая подключенная область была сохранена в отдельном изображении без какого-либо пересечения, как показано здесь
ОБНОВЛЕНИЕ
Я взял прямоугольник с областью интереса, а затем оммотал другие метки
img = imread('shapes.png', IMREAD_GRAYSCALE)
_ , img = threshold(img,120,255,THRESH_BINARY)
n_labals, labels, stats, centroids = connectedComponentsWithStats(img)
for label in range(1,n_labals):
width = stats[label, CC_STAT_WIDTH]
height = stats[label, CC_STAT_HEIGHT]
x = stats[label, CC_STAT_LEFT]
y = stats[label, CC_STAT_TOP]
roi = labels[y-1:y + height+1, x-1:x + width+1].copy() # create a copy of the interest region from the labeled image
roi[ roi != label] = 0 # set the other labels to 0 to eliminate untersections with other labels
roi[ roi == label] = 255 # set the interest region to white
pyplot.imshow(roi,cmap='gray')
pyplot.show()