首页 文章

openCV中的图像分割

提问于
浏览
1

我有一条道路的形象 .

我对它应用了颜色阈值并得到了黄色和白色标记的掩模( cv2.inRange

然后我在面具上应用了特定区域的轮廓以消除噪音( cv2.findContours

我已经获得了良好的面具,其中白色为车道,而其他地方则为黑色 .

但是,我不能将三个通道分成不同的阵列 - 我尝试了分水岭算法,它给了我通道的边界,但是没有将它们分成不同的数组 .

我想要的结果是有三个独立的阵列,每个阵列包含每个通道的所有像素数 .

我也扭曲了这个形象 .

下面的屏幕截图是按位和掩码和原始扭曲图像 .

enter image description here

1 回答

  • 1

    您可以找到轮廓并填充它们并用作蒙版 . 要查找轮廓,可以在 OpenCV 中使用cv2.findContours()函数 . 您可以在OpenCV Docs中找到示例 .
    在文档中,您可以通过以下方式获取轮廓:

    _, contours, _ = cv2.findContours(your_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    

    变量 contours 将具有轮廓列表 . 在您的情况下,每个车道将作为单独的轮廓添加 .

    然后如this回答中所述,您可以创建蒙版 .

    masks = []
    for contour in contours:
        img = np.zeros( (height, width) ) 
        cv2.fillPoly(img, pts =[contours], color=(255,255,255))
        masks.append(img)
    

    而且你也可以使用cv2.drawContours函数,设置 thickness=cv2.FILLED 来创建掩码 .

    Modification

    首先确保所有黑色区域都是 rgbrgb 值 . 然后你可以在here中为第二个参数尝试值,在here中为 findContours() 函数的第三个参数值 .

相关问题