2016-08-08 2 views
1

Ich mag jede Komponente dieses Bild auszuwählen:opencv Python connectedComponents wählt Komponente pro Etikett

enter image description here

In der Praxis jeden einzelnes Dreieck, durch seine Etiketten. Ich verstehe nicht wie. Ich habe diesen Code:

#!/usr/bin/python 
import cv2 
import numpy as np 
img = cv2.imread('invMehs.png', -1) 
imGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
ret, imBw = cv2.threshold(imGray, 250, 255, cv2.THRESH_BINARY) 

invBwMesh = cv2.bitwise_not(imBw) 
Mask = np.ones(imBw.shape, dtype="uint8") * 255 

connectivity = 4 
output = cv2.connectedComponentsWithStats(imBw, connectivity, cv2.CV_32S) 
num_labels = output[0] 
labels = output[1] 
stats = output[2] 
centroids = output[3] 
labels = labels + 1 

b = (labels == 1) 
cv2.imwrite('tst.jpg',labels[b]) 

Aber das Bild ist complety schwarz: S Ihnen sehr danken.

Antwort

0

Das Bild, das Sie speichern möchten (Beschriftungen [b]) enthält nur die dünnen Linien (greylevel 1). Wenn Sie ein Bild im JPEG-Format speichern, glättet der Komprimierungsalgorithmus sie, aber da sie nur eine Graustufe mit dem Hintergrund haben, werden sie gelöscht. Deshalb erhalten Sie ein schwarzes Bild

Speichern im PNG-Format ändern Sie nicht die Bildbeschriftungen.

Um alle Etiketten für jede verbundene Komponente (0 für den Hintergrund) zu halten, sollte der Code zu schreiben sein:

cv2.imwrite('labels.png',output[1])