如何为分水​​岭分割创建多边形

时间:2014-12-24 04:55:41

标签: python opencv watershed

我有一个图像,并希望使用标记控制的分水岭创建此图像的多边形段。我编写了下面的代码但是我不能将彼此相连的对象分开并创建对象的多边形。

如何解决这些问题?非常感谢你的帮助。

import cv2
import numpy as np
import scipy.misc
import scipy.ndimage as snd
# image is read and is converted to a numpy array
img = cv2.imread('D:/exam_watershed/Example_2_medicine/Medicine_create_poly/medicine.jpg')
# image is convereted to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# binary thresholding is done using the threshold
# from Otsu's method
ret1,thresh1 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# foreground pixels are determined by
# performing erosion
fore_ground = cv2.erode(thresh1,None,iterations = 3)
bgt = cv2.dilate(thresh1,None,iterations = 3)
ret,back_ground = cv2.threshold(bgt,1,100,1)
# marker is determined by adding foreground and background pixels
marker = cv2.add(fore_ground,back_ground)
# converting marker to 32 int
marker32 = np.int32(marker)
cv2.watershed(img,marker32)
res = scipy.misc.toimage(marker32)
res.save('D:/exam_watershed/Example_2_medicine/Medicine_create_poly/res_output.png')

original image

image after segment

1 个答案:

答案 0 :(得分:1)

This question似乎非常接近您的需求,因为该示例使用与您完全相同的图像。

要将生成的“水坝”转换为多边形,我建议在结果图像上使用cv2.findContourscv2.approxPolyDP