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