【Python】监控视频中运动目标检测的代码实现及效果展示
生活随笔
收集整理的這篇文章主要介紹了
【Python】监控视频中运动目标检测的代码实现及效果展示
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0、介紹
基于python,使用opencv庫函數,實現監控視頻中的運動目標檢測,Mark一下!
干擾性和靈敏度的權衡,可通過調節代碼中的參數(高斯模糊核、面積閾值、幀差間隔等)進行設置。
?
1、代碼
以下代碼親測可直接運行。?
import cv2vc = cv2.VideoCapture("C:\\Users\\jason\\Desktop\\video.MP4") # 讀入視頻文件 # vc = cv2.VideoCapture("C:/Users/jason/Desktop/152821AA.MP4")rval, firstFrame = vc.read() firstFrame = cv2.resize(firstFrame, (640, 360), interpolation=cv2.INTER_CUBIC) gray_firstFrame = cv2.cvtColor(firstFrame, cv2.COLOR_BGR2GRAY) # 灰度化 firstFrame = cv2.GaussianBlur(gray_firstFrame, (21, 21), 0) #高斯模糊,用于去噪 prveFrame = firstFrame.copy()#遍歷視頻的每一幀 while True:(ret, frame) = vc.read()# 如果沒有獲取到數據,則結束循環if not ret:break# 對獲取到的數據進行預處理frame = cv2.resize(frame, (640, 360), interpolation=cv2.INTER_CUBIC)gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)gray_frame = cv2.GaussianBlur(gray_frame, (3, 3), 0)cv2.imshow("current_frame", gray_frame)cv2.imshow("prveFrame", prveFrame)# 計算當前幀與上一幀的差別frameDiff = cv2.absdiff(prveFrame, gray_frame)cv2.imshow("frameDiff", frameDiff)prveFrame = gray_frame.copy()# 忽略較小的差別retVal, thresh = cv2.threshold(frameDiff, 25, 255, cv2.THRESH_BINARY)# 對閾值圖像進行填充補洞thresh = cv2.dilate(thresh, None, iterations=2)image, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)text = "Unoccupied"# 遍歷輪廓for contour in contours:# if contour is too small, just ignore itif cv2.contourArea(contour) < 50: #面積閾值continue# 計算最小外接矩形(非旋轉)(x, y, w, h) = cv2.boundingRect(contour)cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)text = "Occupied!"# cv2.putText(frame, "Room Status: {}".format(text), (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)cv2.putText(frame, "F{}".format(frameCount), (20, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)cv2.imshow('frame_with_result', frame)cv2.imshow('thresh', thresh)cv2.imshow('frameDiff', frameDiff)# 處理按鍵效果key = cv2.waitKey(60) & 0xffif key == 27: # 按下ESC時,退出breakelif key == ord(' '): # 按下空格鍵時,暫停cv2.waitKey(0)cv2.waitKey(0)vc.release()?
3、效果展示
①、前后兩幀的灰度圖:
?
②、幀差法結果:
?
③、運動目標檢測結果:
?
參考資料:
http://python.jobbole.com/81593/?
https://www.cnblogs.com/gxcdream/p/7531744.html
總結
以上是生活随笔為你收集整理的【Python】监控视频中运动目标检测的代码实现及效果展示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 的基本原理及快速入门
- 下一篇: 【深度学习】语音识别之CTC算法原理解释