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')
按照您的建议,我将分割图像转换为二进制图像,然后运行轮廓: _,contours1,_ = cv2.findContours(thresh3,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)。然后运行功能: DEF approxing(CNT)的: 背面= [] 闭合=真 为CNT的CNT中: 小量= 10 CNT2 = cv2.approxPolyDP(CNT,ε,闭合) back.append(CNT2) 返回 c =近似(轮廓1)。并保存结果,image_out = cv2.imwrite('D:/contour2.jpg',c)。但它有错误图像不是一个numpy或标量。如何解决这个问题?谢谢 – user30985