CV學習筆記(九):光流法的實現

2021-02-08 深度學習衝鴨

關注「深度學習衝鴨」,一起學習一起衝鴨!

設為星標,第一時間獲取更多乾貨


連結:https://zhuanlan.zhihu.com/p/109200164


後臺回復西瓜手推獲得西瓜書手推筆記

後臺回復CV入坑必備獲得CV入坑學習資料


在上一篇文章中,我們簡單了解一下光流法的原理.


在這一篇文章中,我們使用OpenCV中的calcOpticalFlowPyrLK()函數來實現,是基於金字塔LK光流算法,計算某些點集的稀疏光流。



這個函數的具體介紹在


http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/video/doc/motion_analysis_and_object_tracking.html#calcopticalflowfarneback


這個網址有很詳細的介紹,一些具體的參數需要去這個網站上看一下.


在接下來,我們來看一下在OpenCV中lk算法的實現.


代碼的路徑在opencv\sources\samples\python\lk_track.py


代碼本身有英文的注釋,我一起把注釋翻譯成中文,捋順以後發現原理還是很好理解.


import numpy as npimport cv2 as cv
cap = cv.VideoCapture("test.avi")# params for ShiTomasi corner detection 設置 ShiTomasi 角點檢測的參數feature_params = dict(maxCorners=100, qualityLevel=0.3, minDistance=7, blockSize=7)# Parameters for lucas kanade optical flow 設置 lucas kanade 光流場的參數# maxLevel 為使用的圖像金字塔層數lk_params = dict(winSize=(15, 15), maxLevel=2, criteria=(cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT, 10, 0.03))# Create some random colors 產生隨機的顏色值color = np.random.randint(0, 255, (100, 3))# Take first frame and find corners in it 獲取第一幀,並尋找其中的角點(ret, old_frame) = cap.read()old_gray = cv.cvtColor(old_frame, cv.COLOR_BGR2GRAY)p0 = cv.goodFeaturesToTrack(old_gray, mask=None, **feature_params)# Create a mask image for drawing purposes 創建一個掩膜為了後面繪製角點的光流軌跡mask = np.zeros_like(old_frame)
# 視頻文件輸出參數設置out_fps = 12.0 # 輸出文件的幀率fourcc = cv.VideoWriter_fourcc('M', 'P', '4', '2')sizes = (int(cap.get(cv.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv.CAP_PROP_FRAME_HEIGHT)))out = cv.VideoWriter('E:/video/v5.avi', fourcc, out_fps, sizes)
while True: (ret, frame) = cap.read() frame_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # calculate optical flow 能夠獲取點的新位置 p1, st, err = cv.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params) # Select good points 取好的角點,並篩選出舊的角點對應的新的角點 good_new = p1[st == 1] good_old = p0[st == 1] # draw the tracks 繪製角點的軌跡 for i, (new, old) in enumerate(zip(good_new, good_old)): a, b = new.ravel() c, d = old.ravel() mask = cv.line(mask, (a, b), (c, d), color[i].tolist(), 2) frame = cv.circle(frame, (a, b), 5, color[i].tolist(), -1) img = cv.add(frame, mask) cv.imshow('frame', img) out.write(img) k = cv.waitKey(200) & 0xff if k == 27: break # Now update the previous frame and previous points 更新當前幀和當前角點的位置 old_gray = frame_gray.copy() p0 = good_new.reshape(-1, 1, 2)
out.release()cv.destroyAllWindows()cap.release()


運行之後的結果:



可以看到這個算法實現起來效果很差,不過沒關係,到後來一步一步我們的算法會變得很優秀,追蹤的效率也會很順暢.大家亦可以改改裡邊的參數,發現效果還是有很大的不一樣.


最後,有關LK光流法,推薦看一看這一篇論文《Pyramidal Implementation of the Lucas Kanade Feature TrackerDescription of the algorithm》,會有更大的收穫.




!重磅!【深度學習衝鴨技術交流二群】微信交流群已成立


額外贈送福利資源!南京大學《模式識別》PPT,2020最新版《神經網絡與深度學習》中文版pdf,李航老師《統計學習方法》(第2版)課件分享,周志華《機器學習》西瓜書手推筆記(V2.8)


獲取方式:進入群後點開群公告即可領取下載連結


相關焦點

  • CV學習筆記(八):光流法原理
    .在我們基礎的學習中,這些函數其實在圖像進行預操作的過程中已經夠用了.因此在之後的文章中,我們要繼續深入使用OpenCV中的一些函數來去實現幾個簡單的實例.能夠在學習的過程中獲得滿足感.在推廣光流法的時候,我們要有兩個前提假設:第一:所追蹤的像素目標在連續的幀之間要保持基本不變.第二:所追蹤的像素目標在連續的幀之間要有相似的運動趨勢.
  • CV學習筆記(十二):二值化操作
    關注「深度學習衝鴨」,一起學習一起衝鴨!
  • CV學習筆記(十五):邊緣檢測
    OpenCV來實現Canny邊緣檢測算法。CV學習筆記(十三):圖像梯度 - 雲時之間的文章 zhuanlan.zhihu.com/p/11在目標檢測中,Sobel算子對灰度漸變和噪聲較多的圖像處理效果較好,但是Sobel算子對邊緣定位不是很準確(圖像的邊緣不止一個像素),因此精度要求不是很高時,Sobel比較常用。
  • SLAM程序閱讀(第8講 LK光流法)
    下面我們來看代碼。+rgb_file );        depth = cv::imread( path_to_dataset+"/"+depth_file, -1 );        if (index ==0 )        {                        vector<cv::KeyPoint> kps;            cv
  • l7805cv中的5指的什麼_l7805cv全稱是什麼
    打開APP l7805cv中的5指的什麼_l7805cv全稱是什麼 發表於 2017-10-23 10:27:37   l7805cv的全稱是串聯型三端穩壓模塊。
  • 九年級化學學習
    大家好,我是玻璃呀,我來分享一下我的化學學習筆記 九年級上冊化學筆記,希望對大家能有幫助。在線蹲幾個九年級的小夥伴一起打卡學習♡
  • CV好文推薦+遷移學習經驗分享
    遷移學習方法和經驗:1、可以將CNN模型作為特徵提取器:直接去掉最後一層的全連接層,然後把剩下的網絡保留作為一個特徵提取器,再把特徵輸入到一個SVM分類器或者softmax分類器快速實現自己的分類任務;2、就是本文提出的「神經網絡的前3層基本都是通用特徵,進行遷移的效果比較好。」
  • 九年級化學筆記
    @幽靈筆記館本次發布的是九年級上化學筆記第一單元 走進化學世界(筆記如下)最後感謝您的閱讀^ω^ 喜歡的話就點一下關注我會不定時的發布一些我的初中筆記
  • pytorch學習筆記(2):在 MNIST 上實現一個 cnn
    我們會基於上一篇文章中的分類器,來討論實現一個 CNN,需要在之前的內容上做出哪些升級。在前面我要先說一下,這個系列是為了讓大家對 pytorch 從入門到熟悉,對於 deep learning 相關的知識我們不會花費過多的內容去介紹。如果大家對一些 DL 的基礎相關知識不懂的話,推薦幾個資源去學習:所以我們在筆記中對於一些相關的知識就不做深入介紹了。
  • 一份好的cv要怎麼寫?
    當我們申請因特內選的工作時提交的檔案一般有cv和resume兩種雖然大意上都是個人簡歷但還是存在一定的不同 那麼,cv和resum有什麼差別呢?●Resume要求概述與求職有關的教育準備和經歷,是對經驗技能的摘要,其主要目的在說服用人單位老闆僱傭自己;Curriculum Vitae則需集中說明學術工作,不重視與文化程度和學習成績無直接關係的資料。
  • OpenCV+Tensorflow實現實時人臉識別演示
    相比其他的深度學習方法,FaceNet僅需要128個字節來表示一張臉。代碼實現:借用了Github上的一個tensorflow版本facenet實現,下載了預訓練的facenet模型,基於得到embedding數據,這個會輸出512個維度數據,進行比較實現人臉相似度計算。相似度計算採用了餘弦相似度度量,兩個嵌入數據距離為0表示完全一致,距離為1表示完全不同。0.5或者90度表示二者相互獨立。
  • 【CUDA學習筆記】第九篇:基本計算機視覺操作【上】(附實踐源碼下載)
    此刻開始我們一起學習進步!這些插值方法作為resize函數的第四個參數,可以是cv::INTER_LINEAR(雙線性)、cv::INTER_CUBIC(雙三次)或cv::INTER_AREA(區域)。圖像大小調整代碼的輸出如圖: 注意:不同的插值方法也會帶來速度的衰減,三線性插值相對比較慢的。
  • NLP、CV、語音相關AI算法工程師面試問題、代碼、簡歷模板、知識點等資源整理分享
    Github        •算法/深度學習/NLP面試筆記 Github        •算法工程師面試 Github        •2019屆秋招面經集合 Github        •技術面試必備基礎知識 Github        •AI算法崗求職攻略 Github (amusi)
  • 深度學習筆記14:CNN經典論文研讀之Le-Net5及其Tensorflow實現
    作者:魯偉一個數據科學踐行者的學習日記。
  • 小築筆記——工作、學習、閱讀、資料、靈感筆記
    今天呢,給大家帶來一款針對一些經常喜歡記筆記的用戶而打造的記筆記工具,小築筆記特殊的記筆記格式可以讓用戶反覆觀看而不讓,用戶寫起筆記來也很方便快捷。 小築筆記app是一款專門用於資料保存管理的軟體,該軟體是適合於學生或者工作者,是可以將自己的筆記、工作內容可以進行很好的整理,非常方便。小築筆記,樹形結構,無限分層,自由排序。利於分析分解、梳理知識、思想、事情。整潔清晰,為長久的積累、使用而設計。
  • 【CUDA學習筆記】第十一篇:FPS1000+的背景減法之目標跟蹤(附實踐源碼下載)
    #include <iostream>#include <string>#include "opencv2/opencv.hpp"using namespace std;using namespace cv;using namespace cv::cuda;int main(){VideoCapture cap
  • 學習筆記|2019年中央政治局集體學習
    學習筆記:黨報、黨刊、黨臺、黨網等主流媒體必須緊跟時代,大膽運用新技術、新機制、新模式,加快融合發展步伐,實現宣傳效果的最大化和最優化。 學習筆記:五四運動是我國近現代史上具有裡程碑意義的重大事件,五四精神是五四運動創造的寶貴精神財富。我們紀念五四運動、發揚五四精神,必須加強對五四運動和五四精神的研究,以引導廣大青年在五四精神激勵下,為決勝全面建成小康社會、奪取新時代中國特色社會主義偉大勝利、實現中華民族偉大復興的中國夢不懈奮鬥。
  • 深度學習筆記16:CNN經典論文研讀之AlexNet及其Tensorflow實現
    這一成績引起了學界和業界的極大關注,計算機視覺也開始逐漸進入深度學習主導的時代。https://github.com/kratzert/finetune_alexnet_with_tensorflow往期精彩:深度學習筆記15:ubuntu16.04 下深度學習開發環境搭建與配置深度學習筆記14:CNN
  • 實現像素級無痕修復,這種AI算法能讓物體在視頻中消失|硬科技
    這些是依託於一種叫做光流引導的方法實現的效果。在圖片PS非常普遍的當下,視頻的像素級修復一直面臨著諸多難題,其主要問題在於,1)保證時序上的連續型 2)在高解析度下實現修復 3)降低視頻對於計算的開銷。近日,維吉尼亞理工學院和Facebook的科學家研發出一款最新的AI算法,該算法可以讓視頻裡任意物體完全消失。
  • 1,CV;2,NLP;3,推薦系統?
    在這個領域應當避免強行附和流行的模型(比如強化學習),不是說時髦的技術沒用,我個人相信強化學習在推薦領域會有大作用,我只是反對不能言之有物的「支持」和「反對」。此外,推薦/廣告算法也不僅僅只服務於把流量分配準,還有很多涉及作者、廣告主的算法和策略,這塊不像ctr cvr一樣廣為人知,但其實是根本中的根本。