最近在做物體的位姿識別程式,也看了許多的相關**。但僅僅是看並不能有什麼掌握,發現opencv中就有對linemod的實現。準備先把該方法看一遍,具體的實現過程日後再說,先看看是如何使用的。
應用起來其實重要的也就這幾句
// linemod 探測子的初始化(可以讀取已有模型,或者空模型)
cv::ptrdetector; // linemod探測子初始化
// detector可以通過讀取 yml,xml檔案讀取
detector = readlinemod(filename); //abspath + 'name.yml"
static cv::ptrreadlinemod(const std::string& filename)
// detector也可以為空
detector = cv::linemod::getdefaultlinemod();
學習模板的時候,需要輸入對應的彩色資料和深度影象資料。但是有沒有對齊並沒有詳述,所給例子中,是用 openni 介面直接呼叫kinect獲取一組 rgbd資料,由於並沒有kinect v1,所以就沒得搞。我認為應該輸入對齊了的 rgbd資料。在把相機介面改了之後,繼續下面操作
// 生成探測子儲存的模板資料
// cv::mat rgb,depth; 對齊的rgbd資料
std::vectorsources; //將rgbd資料用乙個vector來儲存
sources.push_back(color); sources.push_back(depth);
// 還需要乙個 mask 來表示 需要識別的物體的區域,其實就是物體的剪影
// 新增新的模板
std::string class_id = cv::format("class%d", num_classes); // 類別標籤
cv::rect bb; // 物體的bounding_box
int template_id = detector->addtemplate(sources, class_id, mask, &bb);
// template_id 返回 -1的時候,識別失敗
// 有了對應的模板資料之後,與再次獲取的資料進行對比,找模板
std::vectormatches;
std::vectorclass_ids;
std::vectorquantized_images;
// 這就匹配了。。。
// 所有匹配的結果都會儲存在matches之中,
detector->match(sources, (float)matching_threshold, matches, class_ids, quantized_images);
// m是matches中的乙個結果。 評價標準如下
printf("similarity: %5.1f%%; x: %3d; y: %3d; class: %s; template: %3d\n",
m.similarity, m.x, m.y, m.class_id.c_str(), m.template_id);
opencv還是有點6啊,想看懂源**,估計還得一段時間 學習學習再學習
如果乙個技能足夠複雜 比如從零學程式設計 那就不要指望讀完一本書就可以打天下。多買幾本書同類的書 因為每個作者的出發點是不一樣的,哪怕對同乙個概念都有不同的解釋說明。理解知識的重要過程之一就如牛的反芻一樣,要嚼一遍 嚥下去 再吐出來 再嚼一遍 再嚥下去 所以,既然一本書可以讀幾遍,那麼同一話題多應該...
學習 學習 再學習
原本要使用vs2005開發乙個b s專案的,沒有想到只能先暫時停停了,居然跟不上技術的發展了,呵呵,一直使用delphi delphi也沒能跟上 沒有想到轉到vs2005上竟然有這麼多要學的東西,當然目的是了做乙個好的系統。最近一直在學習asp.net ajax,雖然專案停了,但是我覺得值得,有很多...
只是學習 學習 再學習
通過做 讓我學會了很多東西 什麼 flash div css html js as 雖然都只是皮毛 不過 算是了解那麼一點點吧 哈哈 我還突然發現 我的 數學和英語 進步了不少 而且還都是很實用的 比在學校的進步可快多了 那句話說的很不錯 在你了解了一些皮毛之後你會發現很多東西你都必須去學。因為少一...