程式碼實現:基於opencv庫的單目標跟蹤演算法
阿新 • • 發佈:2019-02-11
import cv2 ############################################################################## # 載入視訊 camera = cv2.VideoCapture('tracking.avi') # 第一幀為空 firstframe = None while True: # cap.read()返回兩個引數賦給兩個值。 # ret的值為True或False,代表有沒有讀入圖片。 # frame,代表當前擷取一幀的圖片 ret, frame = camera.read() if not ret: break #函式cvtColor:將輸入影象從一個顏色空間轉換到另一個顏色空間。 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #函式GaussianBlur:將源影象與指定的高斯核心進行卷積。 gray = cv2.GaussianBlur(gray, (21, 21), 0) if firstframe is None: firstframe = gray continue #函式absdiff:將兩幅圖的差的絕對值輸出到另一幅圖上 frameDelta = cv2.absdiff(firstframe, gray) #函式threshold:對多通道陣列使用固定級別的閾值,返回兩個值,第一個retVal(獲得的閾值值),第二個閾值處理後的影象。 thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1] #函式dilate:對影象進行膨脹操作 thresh = cv2.dilate(thresh, None, iterations=2) x, y, w, h = cv2.boundingRect(thresh) frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2) cv2.imshow("frame", frame) cv2.imshow("Thresh", thresh) cv2.imshow("frame2", frameDelta) key = cv2.waitKey(25) & 0xFF if key == ord("q"): break camera.release() cv2.destroyAllWindows()