我应该能够输入一个像素位置并获得连接到它的所有相同颜色(在我的情况下应该是黑色)像素。如何使用 c++ 在 opencv 中执行此操作。简单地说,输出像素应该用黑色相互连接。FindContours() 方法不起作用,因为它无法输入像素。
问问题
6475 次
2 回答
4
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)
如果您使用堆栈或队列不相关,并且pixels_in_component 稍后将包含所有连接的像素。
或者(如果您仅限于黑色组件)您可以使用 cv::Threshold 来反转您的图像。只需使用反转二进制阈值,其中高于某个值的所有像素都映射为零,而低于阈值的像素则映射到给定值。
如果你有一个 CV_8UC1 图像,你可以调用 threshold(input,output, 1,255, THRESH_BINARY_INV);
将黑色像素映射到 255,其余像素映射为零。然后你可以运行正常的 findContours。
于 2015-04-04T12:50:35.707 回答