<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本程式主要實現了python的opencv人工智慧視覺模組的目標跟蹤功能。
區域性鎖定目標實時動態跟蹤(適用 警方追捕,無人機鎖定拍攝等)
特性:
1.BOOSTING:演演算法原理類似於Harr cascdes(AdaBoost),是一種很老的演演算法。這個演演算法速度慢並且不準。
2.MIL:比BOOSTING準一點
3.KCF:速度比BOOSTING和MIL更快,與BOOSTING和MIL一樣不能很好的處理遮擋問題。
4.CSRT:比KCF更準一些,但是速度比KCF慢
5.MedianFlow:對於快速移動的目標和外形比那花迅速的目標效果不好
6.TLD:會產生朵的false-posittives
7.MOSSE:演演算法速度非常快,但是準確率比不上KCF和CSRT,在一些追求演演算法的速度場合很適用
8.GOTURN:OpenCV中自帶的唯一一個基於深度學習的演演算法,執行短髮需要提前下載好模型檔案
分別對應的伴生的函數:
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
匯入cv模組
ret,frame = cap.read()
import cv2
使用csrt演演算法,參照伴生函數,並賦值給tracker
tracker = cv2.legacy.TrackerCSRT_create()
讀取視訊流
cap = cv2.VideoCapture('11.mp4')
先讀取到第一幀
ret,frame = cap.read()
使用selectROI(前景),畫框將目標框起,並賦值給bbox
bbox = cv2.selectROI('A',frame,fromCenter=False,showCrosshair=True)
初始化tracker,將上面的兩個值傳入
tracker.init(frame,bbox)
讀取每一幀
ret,frame = cap.read()
根據每一幀來更新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演演算法,參照伴生函數,並賦值給tracker cap = cv2.VideoCapture('11.mp4')#讀取視訊流 ret,frame = cap.read()#先讀取第一幀 bbox = cv2.selectROI('A',frame,fromCenter=False,showCrosshair=True)#使用selectROI(前景),畫框將目標框起,並賦值給bbox tracker.init(frame,bbox)#初始化tracker,將上面的兩個值傳入 while True: ret,frame = cap.read()#讀取每一幀 ok,box = tracker.update(frame)#根據每一幀來跟新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()
結果演示
思路構建
1.先將實時攝像流或錄製視訊流,灰度轉化並高斯模糊
2.用二值化演演算法將流中的物體輪廓擴充
3.分別先讀到第一幀和第二幀,讓其對比
4.尋找對比後,流的輪廓位置,並開啟簡易模式
5.過濾物體的矩陣輪廓將其定位繪出
詳細程式碼講解
匯入cv模組
import cv2
將視訊流轉換並讓其高斯模糊
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()
判斷cap是否為開啟狀態
while cap.isOpened():
若為開啟,則第一幀與第二幀比較
diff = cv2.absdiff(frame1,frame2) mask = filter_img(diff)
尋找比較後的物體輪廓,並開啟簡易模式
contours,_ = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
使用方框將視訊流中的物體框出,得到矩陣的寬高
(x,y,w,h) = cv2.boundingRect(contour)
若矩陣的面積小於10(根據視訊流中物體的大小來定義),直接無視
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)
實現前後幀對比,並定位物體運動軌跡
1.將第二幀賦值給第一幀
frame1 = frame2
2.再將cap讀到的賦值給第二幀()
ret,frame2 = cap.read()
等待50毫秒或者按空格結束
if cv2.waitKey(50) == ord(' '): break
釋放視訊流及釋放視窗
cap.release() cv2.destroyAllWindows()
import cv2 def filter_img(frame): #將視訊流轉換灰度並讓其高斯模糊 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)#尋找視訊流的輪廓,簡單模式 #用方框將視訊流中的物體用矩形框出 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(' '):#等待五十毫秒或者按空格結束 break #銷燬cap流 cap.release() #釋放視窗 cv2.destroyAllWindows()
以上就是python進階學習實時目標跟蹤範例詳解的詳細內容,更多關於python進階實時目標跟蹤的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45