在OpenCv中提供了兩種實現目標跟蹤的關鍵算法,LK算法和HS算法,也就是通常所說的稀疏光流和稠密光流。
尋找角點
角點,其實也就是一幅圖像中,容易被跟蹤的特征點,通常來說,這個點在兩個正交方向上都有明顯的倒數,該點在圖像中我們認為是獨一無二的。
從直觀上講,角點是一類有足夠信息並且能夠從當前幀和下一幀都能提取出來的點。
關於角點的定義,是由Harris提出的,其基礎是圖像灰度強度的二階導數矩陣 。該定義的角點位於圖像二階導數的自相關矩陣中有兩個最大特征值的地方,這本質上表示以此點為中心周圍存在至少兩個不同方向的邊緣。實際上一個角點也就是由兩個不同方向的邊緣相交而成的。而且,采用二階導數是因為它對圖像的均勻梯度不產生相應(梯度是一階導數而來,如果一階導數為均勻的,則二階導數為0)。
函數cvGoodFeaturesToTrack()
void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image,
CvPoint2D32f* corners, int* corner_count,
double quality_level, double min_distance,
const CvArr* mask=NULL );1
在這個函數中,輸入圖像image必須是8位或者是32位,也就是IPL_DEPTH_8U 或者是 IPL_DEPTH_32F 單通道圖像。
第二和第三個參數是大小與輸入圖像相同的32位單通道圖像。
參數 temp_image 和 eig_image 在計算過程中被當做臨時變量使用,計算結束後eig_image中的內容是有效的。特別的,每個函數包含了輸入圖像中對應的最小特征值。
corners 是函數的輸出,為檢測到 32位(CvPoint2D32f)的角點數組,在調用 cvGoodFeaturesToTrack 函數之前要為該數組分配內存空間。
corner_count 表示可以返回的最大角點數目,函數調用結束後,其返回實際檢測到的角點數目。
quality_level 表示一點呗認為是角點的可接受的最小特征值,實際用於過濾角點的最小特征值是quality_level與圖像匯總最大特征值的乘積,所以quality_level的值不應該超過1,通常取值為(0.10或者是0.01)
檢測完之後還要進一步剔除掉一些距離較近的角點,min_distance 保證返回的角點之間的距離不小於min_distance個像素
mask是可選參數,是一幅像素值為boolean類型的圖像,用於指定輸入圖像中參與角點計算的像素點,若mask的值為NULL,值表示選擇整個圖像
block_size 是計算導數的自相關矩陣是指定的領域,采用小窗口計算的結果比單點(也就是block_size 為1)計算的結果要好
函數cvGoodFeaturesToTrack() 的輸出結果為需找到的角點的位置數組。
--------------------------------------分割線 --------------------------------------
Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm
Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm
CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm
Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm
Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm
基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm
[翻譯]Ubuntu 14.04, 13.10 下安裝 OpenCV 2.4.9 http://www.linuxidc.com/Linux/2014-12/110045.htm
--------------------------------------分割線 --------------------------------------
OpenCV的詳細介紹:請點這裡
OpenCV的下載地址:請點這裡