我有一张路的图片。
我对其应用颜色阈值并得到一个黄色和白色标记的掩码 (cv2.inRange
)
然后我在蒙版上应用了特定区域的轮廓来去除噪声(cv2.findContours
)
我得到了很好的面具,其中白色为泳道,其他地方为黑色。
但是,我无法将三个车道放入单独的数组中 - 我尝试了分水岭算法,它给出了车道的边界,但没有将它们分成不同的数组。
我想要的结果是拥有三个独立的数组,每个数组包含每条车道的所有像素编号。
我也扭曲了图像。
下面的屏幕截图是蒙版和原始扭曲图像的按位与。
最佳答案
您可以找到轮廓并填充它们并用作蒙版。
要查找轮廓,您可以使用 cv2.findContours()
OpenCV
中的函数。您可以在 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
以创建掩码。
修改
首先确保所有黑色区域在rgb
值中都是(0, 0, 0)
。然后你可以试试 here 中的值对于 here 中的第二个参数和值findContours()
函数的第三个参数..
关于python - openCV 中的图像分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50945444/