溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

opencv檢測動態(tài)物體的實現(xiàn)方法

發(fā)布時間:2021-07-20 13:16:49 來源:億速云 閱讀:375 作者:chen 欄目:開發(fā)技術

這篇文章主要介紹“opencv檢測動態(tài)物體的實現(xiàn)方法”,在日常操作中,相信很多人在opencv檢測動態(tài)物體的實現(xiàn)方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”opencv檢測動態(tài)物體的實現(xiàn)方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

之前我在超市看到當有物體經過時,監(jiān)控的屏幕邊緣會出現(xiàn)綠框。感覺蠻有意思的。來用opencv試試能不能實現(xiàn)類似的效果。

??我采用的檢測動態(tài)物體的方法是,比較前后兩幀圖像,即當前畫面與上一幀的畫面出現(xiàn)了不同。我們把兩幀畫面進行比較。然后框選出運動的物體。我們還希望程序可以判斷當前窗口到底有沒有物體在運動。那么我們就需要添加一個狀態(tài)。為了方便我們找到什么時間有物體移動,我打印出時間。

??當我們的程序檢測到移動的物體時,會捕捉到它的輪廓,添加一個外接整矩形框,返回x,y的坐標。當不返回坐標時,則意味著沒有物體運動,我們通過坐標值來是否有物體移動。并打印出當時的本地時間。

??源代碼:

import cv2
import time
import numpy as np

def videos():
    cap = cv2.VideoCapture(1)
    #不設置是默認640*480,我們這里設置出來
    cap.set(3, 640)
    cap.set(4, 480)

    img_num = 0
    k = np.ones((3, 3), np.uint8)

    while True:
        success, img = cap.read()
        localtime = time.asctime(time.localtime(time.time()))

        if not img_num:
            # 這里是由于第一幀圖片沒有前一幀
            previous = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        gray_diff = cv2.absdiff(gray, previous)  # 計算絕對值差
        # previous 是上一幀圖片的灰度圖

        thresh = cv2.threshold(gray_diff, 40, 255, cv2.THRESH_BINARY)[1]
        mask = cv2.medianBlur(thresh, 3)

        close = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, k)

        cnts = cv2.findContours(close,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)[0]
        for c in cnts:
            area = cv2.contourArea(c)
            if area > 50:
                x, y, w, h = cv2.boundingRect(c)
                cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

                if x>0:
                    print("動",localtime)

        cv2.putText(img, localtime, (30, 30), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0, 0, 255), 2)
        cv2.imshow("x", close)
        cv2.imshow("Result", img)
        img_num += 1

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

videos()

??靜:

opencv檢測動態(tài)物體的實現(xiàn)方法

??動:

??當有物體經過窗口時,控制臺打印出了時間。這樣便于我們在錄制好的視頻內查找。

opencv檢測動態(tài)物體的實現(xiàn)方法

opencv檢測動態(tài)物體的實現(xiàn)方法?

?為了方便,我在窗口左上角加入了時間和日期。

**注意!**必須把
localtime = time.asctime(time.localtime(time.time()))
放入主循環(huán)內,否則只返回調用的一瞬間的本地時間,不會程序持續(xù)。
也不可以使用time.sleep()來控制時間變化,這會影響我們視頻的幀率

??這個方法的弊端是當環(huán)境光線亮度變化過大時,返回的輪廓會產生變化,導致程序判斷整個屏幕都在運動,這點仍需改進。

到此,關于“opencv檢測動態(tài)物體的實現(xiàn)方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI