opencv的kcf呼叫,網上已有好多,我接觸kcf時,希望利用opencv搭建乙個kcf示例程式,但從網上粘過來的**執行時總是報錯,「ptrtracker = tracker::create();"
這句在編譯是出現tracker中沒有create成員」,
#include #include #include #include #include #include using namespace std;
using namespace cv;
int main()
return 0;
}
最後點開opencv庫原始碼,發現現在已經沒有tracker 這個類了,而是trackerkcf類了,呼叫kcf演算法的初始化應該使用:ptrtracker = trackerkcf::create();
網上查了一下,ptr是個ptr模板類啥的沒太明白,參考:
反正大致就是這樣搞是為了安全和泛型程式設計,以前呼叫fast角點檢測也遇到這個ptr ,好像比較新版的opencv好些地方都取樣了這種方式。
因此高版本的opencv中呼叫kcf的完整**如下:
#include #include #include #include #include #include using namespace std;
using namespace cv;
int main()
cout << "press c to leap current image" << endl;
cout << "press q to slect current image" << endl;
cout << "press empty key to start track rio object" << endl;
cap >> frame;
while (1)
if (key == 'q') // 按q鍵退出跳幀
imshow("first", frame);
}cv::destroywindow("first");
roi = selectroi("tracker", frame);
if (roi.width == 0 || roi.height == 0)
return 0;
tracker->init(frame, roi);
// perform the tracking process
printf("start the tracking process\n");
for (;; )
// update the tracking result
tracker->update(frame, roi);
// draw the tracked object
rectangle(frame, roi, scalar(255, 0, 0), 2, 1);
// show image with the tracked object
imshow("tracker", frame);
//quit on esc button
if (char(waitkey(1)) == 'q')
}return 0;
}
至此就完成了kcf的呼叫,最後說一句,在庫配置正確的前提下,當執行opencv程式出錯了,很大可能是你沒有按照它約定的用法書寫程式,此時你可以去看看opencv庫的函式原始碼,一般瀏覽一下類下有沒有這個成員函式和成員變數,函式的引數個數對吧等,這樣也許就找到問題了。 Android低版本上如何呼叫高版本API
平時如果你的minsdk比較小,但是想呼叫高版本的一些api,android studio會提醒該方法在xx版本上才有,當前專案minsdk是多少。很多低版本的系統上就會找不到這個方法。那怎麼做呢?可以去support包中找相應的方法。例如5.0才出的background tint,那麼如果你的mi...
高版本轉低版本 iOS高版本備份如何匯入低版本思路
又是乙個快樂的上班摸魚的一天,好久都沒更新了,這段時間一直在忙於出差送貨,學長最喜歡的週末也都 碰巧 的雙休變單休了,學長忍不住心疼學長我自己個er。可能有小夥伴覺得,不就是更新一篇文章嘛,抽個空不久更新了嘛,這麼多廢話幹嘛?誠然,更新一篇文章抽個空就可以了,但是相對於質量學長真心不敢苟同,學長寧願...
安裝高版本module init tools
如果用預設的configure,module init tools會被安裝到 usr local sbin,這樣的話,在初始化時就不會被呼叫到。其實module init tools提供很好的向下相容性,如果發現核心版本是2.5.48以下的,那麼會自動呼叫.old版本,比如modprobe會自動呼叫...