[英]STL container for simple image segmentation
我需要根据一个简单规则(如果值在2个值之间)对图像进行细分。 我只使用STL容器(我没有使用opencv或其他库,因为我想在教自己使用c ++时保持不受依赖)
我将图像存储为vector< vector<double> >
。 我的蛮力方法是使用2个迭代器遍历我的图像并检查每个值,然后将满足我条件的值的索引推送到另一个vector<int>
。 在找到所有段之前,我必须这样做。 每次我要选择一个细分时,我都会遍历存储的索引。
正确的方法是什么?
一口气可以做到吗?
什么是适合此过程的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.