OpenCV 動態偵測

Open CV® 是電腦視覺與機器學習的函式庫,包含影像擷取、多種影像處理方法、特徵偵測、以及物件識別等豐富功能,透過 OpenCV 擷取並分析影像可輕鬆達成畫面動態偵測的目的,當攝影機畫面有變化程式即可偵測出變化並發出警告。本篇文章以 python 搭配 python-opencv 函式庫實做,可至 motion-detector 下載專案程式碼。

影像動態偵測流程如下:

  1. 擷取連續影像
  2. 計算影像差異: diff = img1 - img2 相同部份為黑色反之為其他亮度
  3. 迷糊化:對差異影像進行模糊化使雜訊淡化
  4. 設定門檻條件:將亮度低的資料濾除,並增強大於門檻的資料點
  5. 擷取圖形輪廓:尋找影像的輪廓並用方框標記,若輪廓的面積夠大即可判定變化發生

程式架構如下圖:

  • motion 類別包含以下物件:
    • cam - 用來擷取影像
    • imageContainer - 影像/資料儲存容器
    • strategyContruction - 提供影像處理流程所需的演算法
    • eventAlarm - 當異常偵測時啟動警告
  • 以 strategy pattern 實做影像處理算法:
    • 定義 alternativeStrategy 模板,讓各個演算法繼承 alternativeStrategy 並實做各自的 execute() 方法
    • diffStrategy - 計算影像差異
    • blurStrategy - 迷糊化
    • thresStrategy - 設定門檻條件強化影像
    • findContoursStrategy - 尋找影像輪廓

執行程式:

  • 安裝所需套件

sudo apt-get install python-opencv aplay

  • 執行動態偵測

python motion.py

  • 如下圖所示左側為攝影機擷取影像右側為動態偵測狀態(以0.5倍速度播放),當影像中球移動時即可偵測出變化,並將變化的範圍以方框標示出來。

 

6 Comments

  1. 莊同學2018-04-08

    你好我用樹莓派執行時出現
    Traceback (most recent call last):
    File “motion.py”, line 122, in
    Motion = motion()
    File “motion.py”, line 18, in __init__
    from camera import camera
    ImportError : No module named camera

    請問一下是哪裡出問題了?

    回覆
    1. Marcador2018-04-09

      請確認下列事項:
      1. 安裝必要套件 sudo apt-get install python-opencv aplay
      2. 下載完整範例程式專案 git clone https://github.com/ChoBill/motion-detector.git
      3. 接上webcam或是關機後接上相機模組
      到 motion-detector 目錄中執行 python motion.py 測試

      回覆
  2. 莊同學2018-04-19

    你好~
    我嘗試安裝必要套件sudo apt-get install python-opencv aplay
    顯示找不到aplay這個套件

    回覆
    1. Marcador2018-04-19

      您可以嘗試下指令:
      > whereis aplay
      如果有顯示 aplay 檔案位置則表示系統已經安裝該程式不需再安裝,僅須安裝 python-opencv 即可

      回覆
  3. 翁同學2020-04-23

    想請問一下說 您的環境是在python2 以及opencv3嗎

    回覆
    1. Marcador2020-04-24

      使用 python 2 以及 opencv 2.4

      回覆

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Scroll to top