如何解决如何获得图像中彩色物体的轮廓
我有这张图片,我想不出一种更好的方法来仅画出图像中的轮廓。该图像是分割后的结果,该图像是用scikit图像中的工具标记的,我试图画出(彩色的)轮廓以将其传递给原始图像。
有人知道OpenCV,Scikit-Image或PIL的一种很好的工具吗?
解决方法
我不知道我对您的问题的解释是否正确,但是您想对屏幕上所有彩色的半圆形物体进行轮廓绘制吗?
我要做的是使用opencv转换为灰色,然后对其设置阈值,然后使用它来查找和绘制轮廓。 您也可以填充这些轮廓,然后在黑色背景上具有白色半圆。 像这样:
image= cv2.imread(r"./colors.png")
imgray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,thresh = cv.threshold(imgray,127,255,0)
contours,hierarchy = cv.findContours(thresh,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)
image = cv2.drawContours(image,contours,-1,(255,255),2)
cv.imshow("cont",image)
cv.waitKey(2000)
img_pl = np.zeros((1000,1000))
cv2.fillPoly(img_pl,pts=contours,color=(255,255))
cv2.imshow("polyfilled",img_pl)
现在,您将不得不使用阈值,因为我发现阈值不能检测到所有内容。我做了这项很快的事前工作,所以我为此道歉了。
,我能做的最好的就是使用skimage的felzenszwalb模块。我认为这是一个简单的代码,即使没有边界,也可以得到我想要的。
from skimage.segmentation import felzenszwalb
from skimage.segmentation import mark_boundaries
image= cv.imread(r"segmented.png")
def draw_boundaries(image):
"""
Takes a color image and mark all boundaries of the colored objects.
Args:
image : 3D numpy array
Returns:
new : 2D numpy array
"""
segments_fz = felzenszwalb(image,scale=1,sigma=0.000001,min_size=1)
marked = mark_boundaries(image,segments_fz,color= (255,mode='outer')
iy,ix,_ = np.where( marked == (255,255) )
new = np.zeros((image.shape[:2]))
new[iy,ix] = 255
return new
结果图像为:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。