Python+OpenCV目標跟蹤實現(xiàn)基本的運動檢測
目標跟蹤是對攝像頭視頻中的移動目標進行定位的過程,有著非常廣泛的應用。實時目標跟蹤是許多計算機視覺應用的重要任務,如監(jiān)控、基于感知的用戶界面、增強現(xiàn)實、基于對象的視頻壓縮以及輔助駕駛等。
有很多實現(xiàn)視頻目標跟蹤的方法,當跟蹤所有移動目標時,幀之間的差異會變的有用;當跟蹤視頻中移動的手時,基于皮膚顏色的均值漂移方法是最好的解決方案;當知道跟蹤對象的一方面時,模板匹配是不錯的技術(shù)。
本文代碼是做一個基本的運動檢測
考慮的是“背景幀”與其它幀之間的差異
這種方法檢測結(jié)果還是挺不錯的,但是需要提前設(shè)置背景幀,如果是在室外,光線的變化就會引起誤檢測,還是很有局限性的。
import cv2 import numpy as np camera = cv2.VideoCapture(0) # 參數(shù)0表示第一個攝像頭 # 判斷視頻是否打開 if (camera.isOpened()): print('Open') else: print('攝像頭未打開') # 測試用,查看視頻size size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)), int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT))) print('size:'+repr(size)) es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4)) kernel = np.ones((5, 5), np.uint8) background = None while True: # 讀取視頻流 grabbed, frame_lwpCV = camera.read() # 對幀進行預處理,先轉(zhuǎn)灰度圖,再進行高斯濾波。 # 用高斯濾波進行模糊處理,進行處理的原因:每個輸入的視頻都會因自然震動、光照變化或者攝像頭本身等原因而產(chǎn)生噪聲。對噪聲進行平滑是為了避免在運動和跟蹤時將其檢測出來。 gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY) gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0) # 將第一幀設(shè)置為整個輸入的背景 if background is None: background = gray_lwpCV continue # 對于每個從背景之后讀取的幀都會計算其與北京之間的差異,并得到一個差分圖(different map)。 # 還需要應用閾值來得到一幅黑白圖像,并通過下面代碼來膨脹(dilate)圖像,從而對孔(hole)和缺陷(imperfection)進行歸一化處理 diff = cv2.absdiff(background, gray_lwpCV) diff = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1] # 二值化閾值處理 diff = cv2.dilate(diff, es, iterations=2) # 形態(tài)學膨脹 # 顯示矩形框 image, contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 該函數(shù)計算一幅圖像中目標的輪廓 for c in contours: if cv2.contourArea(c) < 1500: # 對于矩形區(qū)域,只顯示大于給定閾值的輪廓,所以一些微小的變化不會顯示。對于光照不變和噪聲低的攝像頭可不設(shè)定輪廓最小尺寸的閾值 continue (x, y, w, h) = cv2.boundingRect(c) # 該函數(shù)計算矩形的邊界框 cv2.rectangle(frame_lwpCV, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.imshow('contours', frame_lwpCV) cv2.imshow('dis', diff) key = cv2.waitKey(1) & 0xFF # 按'q'健退出循環(huán) if key == ord('q'): break # When everything done, release the capture camera.release() cv2.destroyAllWindows()
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python中Dataframe數(shù)據(jù)排序方法(含實例講解)
在進行數(shù)據(jù)分析操作時,經(jīng)常需要對數(shù)據(jù)按照某行某列排序,或者按照多行多列排序,以及按照索引值排序等等,下面這篇文章主要給大家介紹了關(guān)于Python中Dataframe數(shù)據(jù)排序方法的相關(guān)資料,需要的朋友可以參考下2023-02-02使用Python快速生成chrome插件相關(guān)文件結(jié)構(gòu)
本文主要介紹了如何使用Python編寫一個程序,它允許用戶創(chuàng)建一些特定文件并將它們保存在指定的文件夾中,同時也能夠啟動?Google?Chrome?瀏覽器并打開擴展頁面,感興趣的可以了解一下2024-11-11tkinter如何實現(xiàn)label超鏈接調(diào)用瀏覽器打開網(wǎng)址
這篇文章主要介紹了tkinter如何實現(xiàn)label超鏈接調(diào)用瀏覽器打開網(wǎng)址問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01