繁体   English   中英

STL容器用于简单的图像分割

[英]STL container for simple image segmentation

我需要根据一个简单规则(如果值在2个值之间)对图像进行细分。 我只使用STL容器(我没有使用opencv或其他库,因为我想在教自己使用c ++时保持不受依赖)

我将图像存储为vector< vector<double> > 我的蛮力方法是使用2个迭代器遍历我的图像并检查每个值,然后将满足我条件的值的索引推送到另一个vector<int> 在找到所有段之前,我必须这样做。 每次我要选择一个细分时,我都会遍历存储的索引。

  1. 正确的方法是什么?

  2. 一口气可以做到吗?

  3. 什么是适合此过程的STL容器? 我正在尝试通过此流程图解决问题 我能想到的最好的是unordered_multimap

如果要将元素移到向量的末尾,请使用std::stable_partition

std::vector<int> vec(20);
// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

std::iota(begin(vec), end(vec), 0);
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

std::stable_partition(begin(vec), end(vec),
                      [](const auto& e){ return (4 <= e && e < 12);});
// 4 5 6 7 8 9 10 11 0 1 2 3 12 13 14 15 16 17 18 19

在线示例在这里

如果将数据存储在单个向量中,这也将起作用-使用迭代器作为列/行的开始和结束而不是整个范围。 我不知道您是如何通过1D或2D向量明智地“跨”读取数据的!

(我意识到关于Sean Parent的gather算法没有解决问题之前,写了一篇非常不错的文章。如果要将选定项目移动到末端以外的地方,请查看编辑历史记录。)

如果将图像分为两段,则可以将分割存储为vector<vector<bool>> ,其大小与图像相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM