高版本OpenCV KCF呼叫演示注意事項

2021-08-20 03:24:03 字數 1755 閱讀 3847

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會自動呼叫...