0

我有一个图像,并想使用标记控制的分水岭创建该图像的分段多边形。我编写了以下代码,但我无法分离相互连接的对象并创建对象的多边形。

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

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')

原始图像

分段后的图像

4

1 回答 1

1

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

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

于 2014-12-24T10:10:33.787 回答