機器學習進階-目標跟蹤-KCF目標跟蹤方法 1.cv2.multiTracker_create(構造選框集合) 2. cv2.TrackerKCF_create(獲得KCF追蹤器) 3. cv2.resize(變化圖像大小) 4.cv2.selectROI(在圖像上框出選框)


1. tracker = cv2.multiTracker_create() 獲得追蹤的初始化結果

2.cv2.TrackerKCF_create() 獲得KCF追蹤器

3.cv2.resize(frame, (w, h), cv2.INTER_AEAR)  # 進行圖像大小的重新變化
參數說明:frame表示輸入圖片,(w, h) 表示變化后的長和寬, cv2.INTER_AEAR表示插值的方法

4.cv2.selectROI(‘Frame’, frame, fromCenter=False,showCrosshair) 在圖像上進行選框操作
參數說明:‘Frame'表示圖片的名字,frame表示讀取的圖片,fromCenter表示選框的起點是否在中心位置,showCrosshair表示是否展示選框

KCF是一種鑒別式追蹤方法,這類方法一般在追蹤過程中訓練一個目標檢測器,使用目標檢測器與預測下一個階段預測位置是否是目標,然后使用新檢測結果去跟新訓練集而跟新目標檢測其

 

KCF貢獻

1.使用脊回歸訓練目標檢測器,成功利用循環矩陣在傅里葉空間對角化的性質,將矩陣的運算轉換為向量的Hadamad積,即元素的點乘,大大降低了運算量,提高了運算速度

    1.脊回歸,在原有的基礎上引入了λ|w^2| 為了防止過擬合的出現,即w的分布更小且更加均勻(0, 0, 0, 1) 和 (0.25, 0.25, 0.25, 0.25), 對w進行求導,導數為0,解得w

   2.循環矩陣,即訓練圖像都是通過目標樣本的循環位移得到的, 通過PxQ進行x軸和y軸的平移變化

   

    3.傅氏空間矩陣對角化, 即對上述的循環空間做一個傅里葉變化

     4. 將循環矩陣x帶入到脊回歸進行求解

最后做的一個總結部分

參考鏈接:https://www.cnblogs.com/YiXiaoZhou/p/5925019.html

代碼:

第一步: 進行 argparse參數設置

第二步:使用字典構造已有的追蹤目標的方法

第三步:使用cv2.multiTracker_create() 構造出追蹤器集合trackers

第四步:使用cv2.capture進行視頻的讀入

第五步:while True循環,使用cv2.read() 讀入圖片

第六步:使用cv2.resize進行圖片的放縮變換

第七步:trackers.apply(frame)對圖片運用追蹤算法

第八步:循環boxes對圖像進行畫圖操作
第九步:展示圖片,

第十步:並判斷按鍵,如果按s,進行box的添加,如果按ESC鍵就退出

第十一步:如果按s,使用box = cv2.selectROI()進行區域的選擇,並使用trackers.add將追蹤器和圖片,以及區域進行添加

import argparse
import cv2
import time

# 第一步進行參數設置
ap = argparse.ArgumentParser()
ap.add_argument('-v', '--video', type=str, default='videos/soccer_01.mp4',
                help='path to input video file')
ap.add_argument('-t', '--tracker', type=str,
                default='kcf', help='Opencv object tracker type')

args = vars(ap.parse_args())


# opencv已經實現的追蹤算法
# 第二步:構造cv2已有追蹤算法的列表
OPENCV_OBJECT_TRACKERS = {
    "csrt": cv2.TrackerCSRT_create,
    "kcf": cv2.TrackerKCF_create,
    "boosting": cv2.TrackerBoosting_create,
    "mil": cv2.TrackerMIL_create,
    "tld": cv2.TrackerTLD_create,
    "medianflow": cv2.TrackerMedianFlow_create,
    "mosse": cv2.TrackerMOSSE_create
}

# 第三步:實例化追蹤器
# 實例化Opencv's multi-object tracker
trackers = cv2.MultiTracker_create()

# 第四步:使用cv2.VideoCapture讀取視頻
vs = cv2.VideoCapture(args['video'])

while True:
    # 第五步:讀入第一張圖片
    frame = vs.read()
    frame = frame[1]
    # 到頭了就結束
    if frame is None:
        break

    # 第六步:使用cv2.resize對圖像進行長寬的放縮操作
    h, w = frame.shape[:2]
    width = 600
    r = width / float(w)
    dim = (width, int(r * h))
    frame = cv2.resize(frame, dim, cv2.INTER_AREA)

    # 第七步:使用trackers.apply獲得矩形框
    (success, boxes) = trackers.update(frame)

    # 第八步:循環多組矩形框,進行畫圖操作
    for box in boxes:
        (x, y, w, h) = [int(v) for v in box]
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 第九步:進行圖像展示
    cv2.imshow('Frame', frame)

    # 第十步:判斷按鍵,如果是s的話,進行畫出新的box
    key = cv2.waitKey(100) & 0xff

    if key == ord('s'):
        # 第十一步:選擇一個區域,按s鍵,並將tracker追蹤器,frame和box傳入到trackers中
        box = cv2.selectROI('Frame', frame, fromCenter=False,
                            showCrosshair=True)
        tracker = OPENCV_OBJECT_TRACKERS[args['tracker']]()
        trackers.add(tracker, frame, box)

    elif key == 27:
        break


vs.release()
cv2.destroyAllWindows()

  

                                    區域選擇                                                                                                   追蹤效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 cv2.resize(), 改變圖片大小 機器學習進階-直方圖與傅里葉變化-直方圖均衡化 1.cv2.equalizeHist(進行直方圖均衡化) 2. cv2.createCLAHA(用於生成自適應均衡化圖像) 機器學習進階-背景建模-(幀差法與混合高斯模型) 1.cv2.VideoCapture(進行視頻讀取) 2.cv2.getStructureElement(構造形態學的卷積) 3.cv2.createBackgroundSubtractorMOG2(構造高斯混合模型) 4.cv2.morpholyEx(對圖像進行形態學的變化) 機器學習進階-圖像特征sift-SIFT特征點 1.cv2.xfeatures2d.SIFT_create(實例化sift) 2. sift.detect(找出關鍵點) 3.cv2.drawKeypoints(畫出關鍵點) 4.sift.compute(根據關鍵點計算sift向量) KCF追蹤方法流程原理 機器學習進階-圖像金字塔與輪廓檢測-輪廓檢測 1.cv2.cvtColor(圖像顏色轉換) 2.cv2.findContours(找出圖像的輪廓) 3.cv2.drawContours(畫出圖像輪廓) 4.cv2.contourArea(輪廓面積) 5.cv2.arcLength(輪廓周長) 6.cv2.aprroxPloyDP(獲得輪廓近似) 7.cv2.boudingrect(外接圓).. 機器學習進階-圖像基本操作-數值計算 1.cv2.add(將圖片進行加和) 2.cv2.resize(圖片的維度變換) 3.cv2.addWeighted(將圖片按照公式進行重疊操作) 圖像resize和crop 相機內參如何變化【初始版本】 機器學習進階-目標追蹤-SSD多進程執行 1.cv2.dnn.readnetFromCaffe(用於讀取已經訓練好的caffe模型) 2.delib.correlation_tracker(生成追蹤器) 5.cv2.writer(將圖片寫入視頻中) 6.cv2.dnn.blobFromImage(圖片歸一化) 10.multiprocessing.process(生成進程) 機器學習進階-圖像形態學變化-禮帽與黑帽 1.cv2.TOPHAT(禮帽-原始圖片-開運算后圖片) 2.cv2.BLACKHAT(黑帽 閉運算-原始圖片)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM