最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python進階學(xué)習(xí)實時目標跟蹤示例詳解

 更新時間:2023年03月22日 09:57:30   作者:華為云開發(fā)者聯(lián)盟  
這篇文章主要為大家介紹了python進階學(xué)習(xí)實時目標跟蹤示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

本程序主要實現(xiàn)了python的opencv人工智能視覺模塊的目標跟蹤功能。

項目介紹

區(qū)域性鎖定目標實時動態(tài)跟蹤(適用 警方追捕,無人機鎖定拍攝等)

首先先介紹幾種AI視覺算法

特性:

1.BOOSTING:算法原理類似于Harr cascdes(AdaBoost),是一種很老的算法。這個算法速度慢并且不準。

2.MIL:比BOOSTING準一點

3.KCF:速度比BOOSTING和MIL更快,與BOOSTING和MIL一樣不能很好的處理遮擋問題。

4.CSRT:比KCF更準一些,但是速度比KCF慢

5.MedianFlow:對于快速移動的目標和外形比那花迅速的目標效果不好

6.TLD:會產(chǎn)生朵的false-posittives

7.MOSSE:算法速度非常快,但是準確率比不上KCF和CSRT,在一些追求算法的速度場合很適用

8.GOTURN:OpenCV中自帶的唯一一個基于深度學(xué)習(xí)的算法,運行短發(fā)需要提前下載好模型文件

分別對應(yīng)的伴生的函數(shù):

kcf:cv2.legacy.TrackerKCF_create
csrt:cv2.legacy.TrackerCSRT_create
boosting:cv2.legacy.TrackerBoosting_create
mil:cv2.legacy.TrackerMIL_create
tld:cv2.legacy.TrackerTLD_create
medianflow:cv2.legacy.TrackerMedianFlow_create
mosse:cv2.legacy.TrackerMOSSE_create

詳細代碼講解

導(dǎo)入cv模塊

ret,frame = cap.read()
import cv2

使用csrt算法,引用伴生函數(shù),并賦值給tracker

tracker = cv2.legacy.TrackerCSRT_create()

讀取視頻流

cap = cv2.VideoCapture('11.mp4')

先讀取到第一幀

ret,frame = cap.read()

使用selectROI(前景),畫框?qū)⒛繕丝蚱?,并賦值給bbox

bbox = cv2.selectROI('A',frame,fromCenter=False,showCrosshair=True)

初始化tracker,將上面的兩個值傳入

tracker.init(frame,bbox)

讀取每一幀

ret,frame = cap.read()

根據(jù)每一幀來更新tracker

ok,box = tracker.update(frame)

若讀取成功,就定位畫框,并跟隨

    if ok :
        (x,y,w,h) = [int(v) for v in box]
        cv2.rectangle(frame,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=2)

顯示視頻流

cv2.imshow('A', frame)

等待50毫秒或按空格鍵退出

    if cv2.waitKey(50) == ord(' '):
        break

 釋放視頻流和釋放窗口

cap.release()
cv2.destroyAllWindows()

完整代碼及注釋:

import cv2
tracker = cv2.legacy.TrackerCSRT_create()#使用csrt算法,引用伴生函數(shù),并賦值給tracker
cap = cv2.VideoCapture('11.mp4')#讀取視頻流
ret,frame = cap.read()#先讀取第一幀
bbox = cv2.selectROI('A',frame,fromCenter=False,showCrosshair=True)#使用selectROI(前景),畫框?qū)⒛繕丝蚱穑①x值給bbox
tracker.init(frame,bbox)#初始化tracker,將上面的兩個值傳入
while True:
    ret,frame = cap.read()#讀取每一幀
    ok,box = tracker.update(frame)#根據(jù)每一幀來跟新tracker
    # 若讀取成功,我們就定位畫框,并跟隨
    if ok :
        (x,y,w,h) = [int(v) for v in box]
        cv2.rectangle(frame,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=2)
    cv2.imshow('A', frame)#顯示視頻流
    if cv2.waitKey(50) == ord(' '):#等待50毫秒或鍵盤按空格鍵退出
        break
# 釋放視頻流,釋放窗口
cap.release()
cv2.destroyAllWindows()

結(jié)果演示

區(qū)域性全部實時動態(tài)目標跟蹤(適用夜視跟蹤,范圍性觀察等)

思路構(gòu)建

1.先將實時攝像流或錄制視頻流,灰度轉(zhuǎn)化并高斯模糊

2.用二值化算法將流中的物體輪廓擴充

3.分別先讀到第一幀和第二幀,讓其對比

4.尋找對比后,流的輪廓位置,并開啟簡易模式

5.過濾物體的矩陣輪廓將其定位繪出

詳細代碼講解

導(dǎo)入cv模塊

import cv2

將視頻流轉(zhuǎn)換并讓其高斯模糊

    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray,(5,5),0)

二值化擴充

    _,thresh = cv2.threshold(blur,20,255,cv2.THRESH_BINARY)
    dilated = cv2.dilate(thresh,None,iterations=3)
    return dilated

讀取視頻流或?qū)崟r攝像流

cap = cv2.VideoCapture('11.mp4')

讀取第一幀

ret,frame1 = cap.read()

讀取第二幀

ret,frame2 = cap.read()

判斷cap是否為打開狀態(tài)

while cap.isOpened():

若為打開,則第一幀與第二幀比較

diff = cv2.absdiff(frame1,frame2)
mask = filter_img(diff)

尋找比較后的物體輪廓,并開啟簡易模式

contours,_ = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

使用方框?qū)⒁曨l流中的物體框出,得到矩陣的寬高

(x,y,w,h) = cv2.boundingRect(contour)

若矩陣的面積小于10(根據(jù)視頻流中物體的大小來定義),直接無視

if cv2.contourArea(contour) < 10:

將過濾的物體的矩陣輪廓繪出(一定要用int整形)

cv2.rectangle(frame1,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=1)

將第一幀顯示

cv2.imshow('A',frame1)

將上面賦值的mask顯示

cv2.imshow('B',mask)

實現(xiàn)前后幀對比,并定位物體運動軌跡

1.將第二幀賦值給第一幀

frame1 = frame2

2.再將cap讀到的賦值給第二幀()

ret,frame2 = cap.read()

等待50毫秒或者按空格結(jié)束

    if cv2.waitKey(50) == ord(' '):
        break

釋放視頻流及釋放窗口

cap.release()
cv2.destroyAllWindows()

 完整代碼及注釋:

import cv2
def filter_img(frame):
    #將視頻流轉(zhuǎn)換灰度并讓其高斯模糊
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray,(5,5),0)
    #二值化將其擴充
    _,thresh = cv2.threshold(blur,20,255,cv2.THRESH_BINARY)
    dilated = cv2.dilate(thresh,None,iterations=3)
    return dilated
# 讀取視頻流
cap = cv2.VideoCapture('11.mp4')
ret,frame1 = cap.read()#讀到第一幀
ret,frame2 = cap.read()#讀到第二幀
while cap.isOpened():#判斷cap是否打開
    diff = cv2.absdiff(frame1,frame2)#若打開,則第一幀和第二幀作比較
    mask = filter_img(diff)
    contours,_ = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#尋找視頻流的輪廓,簡單模式
    #用方框?qū)⒁曨l流中的物體用矩形框出
    for contour in contours:
        (x,y,w,h) = cv2.boundingRect(contour)#得到矩陣的寬高
        if cv2.contourArea(contour) < 10:#若矩陣的面積小于200,就無視(太小了)
            continue
        cv2.rectangle(frame1,pt1=(int(x),int(y)),pt2=(int(x)+int(w),int(y)+int(h)),color=(0,255,0),thickness=1)#將過濾的物體的矩陣輪廓繪出
    # cv2.drawContours(frame1,contours,-1,(0,255,0),2)#將視頻流中的物體輪廓畫出
    cv2.imshow('A',frame1)#將第一幀顯示
    cv2.imshow('B',mask)#將mask也顯示
    frame1 = frame2#將第二幀賦值給第一幀
    ret,frame2 = cap.read()#再將cap讀到的賦值給第二幀
    if cv2.waitKey(50) == ord(' '):#等待五十毫秒或者按空格結(jié)束
        break
#銷毀cap流
cap.release()
#釋放窗口
cv2.destroyAllWindows()

結(jié)果顯示

以上就是python進階學(xué)習(xí)實時目標跟蹤示例詳解的詳細內(nèi)容,更多關(guān)于python進階實時目標跟蹤的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用Python開發(fā)Markdown表格結(jié)構(gòu)轉(zhuǎn)換為Excel工具

    利用Python開發(fā)Markdown表格結(jié)構(gòu)轉(zhuǎn)換為Excel工具

    在數(shù)據(jù)管理和文檔編寫過程中,我們經(jīng)常使用 Markdown 來記錄表格數(shù)據(jù),但它沒有Excel使用方便,所以本文將使用Python編寫一個轉(zhuǎn)換工具,希望對大家有所幫助
    2025-03-03
  • Python使用樹狀圖實現(xiàn)可視化聚類詳解

    Python使用樹狀圖實現(xiàn)可視化聚類詳解

    一般情況下,我們都是使用散點圖進行聚類可視化,但是某些的聚類算法可視化時散點圖并不理想,所以在這篇文章中,我們介紹如何使用樹狀圖(Dendrograms)對我們的聚類結(jié)果進行可視化
    2023-03-03
  • python迭代器,生成器詳解

    python迭代器,生成器詳解

    這篇文章主要介紹了Python中的迭代器和生成器,涉及到Python中很多重要的特性,小編覺得這篇文章寫的還不錯,需要的朋友可以參考下
    2021-10-10
  • pygame實現(xiàn)俄羅斯方塊游戲

    pygame實現(xiàn)俄羅斯方塊游戲

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)俄羅斯方塊游戲,代碼注釋詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • python模式 工廠模式原理及實例詳解

    python模式 工廠模式原理及實例詳解

    這篇文章主要介紹了python模式 工廠模式原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • python實現(xiàn)自動打卡小程序

    python實現(xiàn)自動打卡小程序

    這篇文章主要為大家詳細介紹了python實現(xiàn)自動打卡小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Python tkinter 樹形列表控件(Treeview)的使用方法

    Python tkinter 樹形列表控件(Treeview)的使用方法

    這篇文章主要介紹了Python tkinter 樹形列表控件(Treeview)的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python中playwright結(jié)合pytest執(zhí)行用例的實現(xiàn)

    python中playwright結(jié)合pytest執(zhí)行用例的實現(xiàn)

    本文主要介紹了python中playwright結(jié)合pytest執(zhí)行用例的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python安全隱患最新URL解析漏洞防范措施

    Python安全隱患最新URL解析漏洞防范措施

    這篇文章主要為大家介紹了Python安全隱患,最新URL解析漏洞的防范措施,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題

    如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題

    本文主要介紹了如何修改pycharm使用anaconda環(huán)境后的pip install安裝路徑問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

罗定市| 平遥县| 芮城县| 桃江县| 新丰县| 怀化市| 东乡县| 尚志市| 临颍县| 泸溪县| 耒阳市| 增城市| 贵溪市| 汝阳县| 樟树市| 陵水| 镇坪县| 米泉市| 阜平县| 根河市| 神池县| 儋州市| 巩义市| 民县| 来宾市| 盐边县| 金湖县| 福州市| 潼关县| 裕民县| 星座| 康平县| 东兰县| 沈丘县| 三穗县| 孟津县| 曲松县| 濮阳市| 衡水市| 堆龙德庆县| 武宁县|