【发布时间】:2017-12-06 14:58:54
【问题描述】:
我有那种图片
如图所示,图像主要有两部分。 上下。
我想把它们分开。
在第一次尝试中,我使用 K-meas 算法实现。
In[2]: kmeans = KMeans(n_clusters=2, random_state=0).fit(...
np.asarray(np.where(finalImage == 255)).T)
它适用于上下具有几乎相同数量的点的 Image1 案例。但不适用于图 2。
比我使用 cv2.findContours 获得最大面积 2 轮廓
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)
但它有时会走一个轮廓而不是 2...
有没有强制获取两个blob?
【问题讨论】:
-
如果 blob 的实际大小并不重要,而只是相对大小,您可以在提取 blob 之前尝试应用腐蚀,这可能有助于消除两个 blob 之间的连接。
标签: python opencv image-processing computer-vision image-segmentation