如何检测opencv中具有相同颜色值的所有连接的相邻像素

时间:2015-04-04 12:38:45

标签: c++ opencv image-processing connected-components

我应该能够输入一个像素位置并获得与它相连的所有相同颜色(在我的情况下应该是黑色)像素。如何使用c ++在opencv中执行此操作。输出像素应该用黑色相互连接。 FindContours()方法不起作用,因为无法用像素进行处理。

2 个答案:

答案 0 :(得分:3)

OpenCV没有这样的功能,所以你必须自己实现它。一种简单的方法是在树中实现类似BFS或DFS的搜索算法。

som伪代码:

list<pixels> pixels_in_component;
stack<pixels> neighbours;
neighbours.add(starting_point)

while not neightbours.empty:
   p = neighbours.pop();
   pixels_in_component.append(p) 
   for each adjacent pixel n of p:
     if color(n) == color(starting_point):
         neighbours.append(n)

如果使用堆栈或队列不相关,pixel_in_component将包含所有连接的像素。

或(如果您仅限于黑色组件),您可以使用cv :: Threshold反转图像。只需使用反转二进制阈值,其中高于某个值的所有像素都映射到零,而低于阈值的像素则映射到给定值。

如果你有CV_8UC1图片,你可以打电话     阈值(输入,输出,1,255,THRESH_BINARY_INV);

将黑色像素映射到255,其余为零。然后你可以运行正常的findContours。

答案 1 :(得分:3)

您应该只使用floodFill

Here您可以找到有关如何获取连接到种子点的所有像素的二进制图像的详细说明。