我有一条道路的图像。
我对其应用了颜色阈值处理,并得到了黄色和白色标记(cv2.inRange
)的蒙版
然后我在蒙版上应用了特定区域的轮廓,以消除噪音(cv2.findContours
)
我已经获得了很好的口罩,上面有白色的车道,其他地方都是黑色的。
但是,我无法将这三个通道分成单独的阵列-我尝试了分水岭算法,它给了我通道的边界,但是没有将它们分成不同的阵列。
我想要的结果是拥有三个单独的数组,每个数组包含每个泳道的所有像素数。
我也扭曲了图像。
下面的屏幕快照是蒙版和原始扭曲图像的按位和
。答案 0 :(得分: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
来创建遮罩。
修改
首先确保所有黑色区域的值均为(0, 0, 0)
的{{1}}。然后,您可以尝试here中第二个参数的值和here中rgb
函数的第三个参数的值。