Ich habe diese Art von BildernSeparate Bild als zwei Teil in Python
Wie Bilder dargestellt, Bild hauptsächlich einen zweiteiliges hat. oberen und unteren.
Ich möchte sie trennen.
Im ersten Versuch implementiert ich mit K-Meas-Algorithmen.
In[2]: kmeans = KMeans(n_clusters=2, random_state=0).fit(... np.asarray(np.where(finalImage == 255)).T)
Es ist Werke auf Image1 Fälle, die obere und die untere eine fast gleiche Menge von Punkten haben. Aber wird funktioniert nicht bei Bild 2.
Nachdem ich als cv2.findContours verwendenmaximale Fläche 2 Konturen zu bekommen
im, contours, hierarchy = cv2.findContours(Img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# get first contour
maxContour = 0
for contour in contours:
contourSize = cv2.contourArea(contour)
if contourSize > maxContour:
maxContour = contourSize
maxContourData0 = contour
# get second contour
if contours.__len__() != 1:
maxContour = 0
for contour in contours:
contourSize = cv2.contourArea(contour)
if contourSize > maxContour and np.sum(np.subtract(contour[0:5],maxContourData0[0:5])) != 0:
maxContour = contourSize
maxContourData1 = contour
mask = np.zeros_like(Img)
cv2.fillPoly(mask, [maxContourData0], 1)
if contours.__len__() != 1:
cv2.fillPoly(mask, [maxContourData1], 1)
finalImage = np.zeros_like(Img)
finalImage[:, :] = np.multiply(Img, mask)
cv2.imshow('final', finalImage)
cv2.waitKey(0)
Aber es geht manchmal eine Kontur nicht 2 ...
gibt es irgendwelche zwei blob zwanghaft zu bekommen?
Wenn die tatsächliche Größe der Kleckse nicht von Bedeutung ist, sondern nur die relative Größe, könnten Sie Versuchen Sie, Erosion anzuwenden, bevor Sie die Blobs extrahieren. Dies könnte helfen, die Verbindung zwischen den beiden Blobs zu entfernen. – Mathias