判断视频中是否存在移动物体
生活随笔
收集整理的這篇文章主要介紹了
判断视频中是否存在移动物体
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
'''
測試下檢測場景內是否有物體移動,若有,打印信息
'''
import cv2
import time
camera = cv2.VideoCapture(0) # 參數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))fps = 5 # 幀率
pre_frame = None # 總是取視頻流前一幀做為背景相對下一幀進行比較
i = 0
while True:start = time.time()grabbed, frame_lwpCV = camera.read() # 讀取視頻流gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY) # 轉灰度圖if not grabbed:breakgray_lwpCV = cv2.resize(gray_lwpCV, (500, 500))# 用高斯濾波進行模糊處理,進行處理的原因:每個輸入的視頻都會因自然震動、光照變化或者攝像頭本身等原因而產生噪聲。對噪聲進行平滑是為了避免在運動和跟蹤時將其檢測出來。gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)# 在完成對幀的灰度轉換和平滑后,就可計算與背景幀的差異,并得到一個差分圖(different map)。還需要應用閾值來得到一幅黑白圖像,并通過下面代碼來膨脹(dilate)圖像,從而對孔(hole)和缺陷(imperfection)進行歸一化處理if pre_frame is None:pre_frame = gray_lwpCVelse:img_delta = cv2.absdiff(pre_frame, gray_lwpCV)thresh = cv2.threshold(img_delta, 25, 255, cv2.THRESH_BINARY)[1]thresh = cv2.dilate(thresh, None, iterations=2)# image, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for c in contours:if cv2.contourArea(c) < 1000: # 設置敏感度continueelse:print("咦,有什么東西在動0.0")breakpre_frame = gray_lwpCVkey = cv2.waitKey(1) & 0xFF# 按'q'健退出循環if key == ord('q'):break
# When everything done, release the capture
camera.release()
cv2.destroyAllWindows()
?
總結
以上是生活随笔為你收集整理的判断视频中是否存在移动物体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试比较瀑布模型、快速原型模型、增量模型和
- 下一篇: 【牛客】中国牛市