簡體   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