我正在尝试使用分水岭分割来分割植物的叶子
path = '../Plant_Phenotyping_Datasets/Plant/Ara2013-Canon/ara2013_plant001_rgb.png'
img = cv.imread(path)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
thresh = cv.threshold(gray, 65, 255, cv.THRESH_BINARY)[1]
thresh = cv.medianBlur(thresh, 5)
kernel = np.ones((3, 3), np.uint8)
sure_bg = cv.dilate(thresh, kernel, iterations=3)
dist_transform = cv.distanceTransform(thresh, cv.DIST_L2, 5)
sure_fg = cv.threshold(dist_transform, 0.5*dist_transform.max(), 255, 0)[1]
sure_fg = np.uint8(sure_fg)
unknown = cv.subtract(sure_bg, sure_fg)
markers = cv.connectedComponents(sure_fg)[1]
markers = markers+1
markers[unknown == 255] = 0
cv.watershed(img, markers)
img[markers == -1] = [255, 0, 0]
此示例中的代码已调整:https://docs.opencv.org/master/d3/db4/tutorial_py_watershed.html。 目的是让opencv在“标记”的基础上对未知区域进行识别,它将每个确定的前景区域(必须是树叶区域)设置为标签,背景设置为1,未知区域(前景与地面之间的区域)背景)设为0。
但是,分割后的结果如下:
可能是因为工厂的蒸汽区域被标记为背景区域标签,所以在分水岭过程中,这是否让背景标签的优先级最低? 谢谢。