gpt4 book ai didi

c++ - 查找每个 ConnectedComponent 区域的邻域

转载 作者:行者123 更新时间:2023-11-28 04:41:05 28 4
gpt4 key购买 nike

我使用 OpenCV 中的 SuperpixelSLIC 计算超像素并获取每个超像素的标签,现在我需要计算每个标签的邻域。例如,考虑下面数组中的 8 连通情况,标签 1 的邻域是 {2, 5},标签 2 的邻域是 {1, 3, 4, 5},标签 3 的邻域是 {2, 4},标签 4 的邻域是 {2, 3}

111223333
112222334
122233344
555244444

如何使用 opencv 有效地实现这一点?

最佳答案

不知道OpenCV有没有专门针对这个的函数。

如果你想自己构建它,你可以使用这样的数据结构:

std::unordered_map<int,std::set<int>> neighbors;

这是一个将标签(我使用 int,替换为您在标记图像中使用的任何类型)与一组标签(邻居)相关联的 HashMap 。

然后您将遍历每个像素,并检查其 8 连通邻域:

int label = image[ii,jj];
int other = image[ii+1,jj]; // this inside a loop over the neighborhood
if (label != other) {
neighbors[label].insert(other);
}

如果 other 已经在集合中,则 insert 操作将无效,因此无需显式检查。

在此过程结束时,neighbors 将为图像中的每个标签包含一个条目,迭代该条目将给出一个排序的邻居列表:

label = 2;
std::cout << "Neighbors for label " << label << " are: ";
for(auto n : neighbors[label]) {
std::cout << n << ", ";
}
std::cout << '\n';

在你的例子中应该输出:

Neighbors for label 2 are: 1, 3, 4, 5,

关于c++ - 查找每个 ConnectedComponent 区域的邻域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50183908/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com