【发布时间】:2015-04-04 12:38:45
【问题描述】:
我应该能够输入一个像素位置并获得与其连接的所有相同颜色(在我的情况下应该是黑色)的像素。如何使用 c++ 在 opencv 中执行此操作。简单地说,输出像素应该用黑色相互连接。 FindContours() 方法不起作用,因为它无法输入像素。
【问题讨论】:
标签: c++ opencv image-processing connected-components
我应该能够输入一个像素位置并获得与其连接的所有相同颜色(在我的情况下应该是黑色)的像素。如何使用 c++ 在 opencv 中执行此操作。简单地说,输出像素应该用黑色相互连接。 FindContours() 方法不起作用,因为它无法输入像素。
【问题讨论】:
标签: c++ opencv image-processing connected-components
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 图像,您可以调用 阈值(输入,输出,1,255,THRESH_BINARY_INV);
将黑色像素映射到 255 并将其余像素映射到零。然后你就可以运行正常的 findContours 了。
【讨论】:
【讨论】: