偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

OpenCV 也可以檢測(cè)、跟蹤移動(dòng)物體

開(kāi)發(fā)
在本文中,我將解釋背景減除器的工作原理、不同類(lèi)型的背景減除器以及如何使用 OpenCV 在 Python 中使用它們。

想象一下,你用手機(jī)拍攝視頻,按下一個(gè)按鈕,相機(jī)就開(kāi)始錄制視頻。在幕后,手機(jī)相機(jī)非常快速地捕捉圖像,當(dāng)你觀(guān)看視頻時(shí),你看到的是一幅接一幅的圖像,但你沒(méi)注意到,因?yàn)檫@個(gè)過(guò)程發(fā)生得非??臁R幻腌妰?nèi),你的手機(jī)顯示了30多幅圖像。如果你比較這些圖像并找到它們之間的差異,你就可以檢測(cè)到移動(dòng)物體,這正是背景減除器的工作原理。

使用背景減除器檢測(cè)和追蹤鳥(niǎo)類(lèi)

在本文中,我將解釋背景減除器的工作原理、不同類(lèi)型的背景減除器以及如何使用 OpenCV 在 Python 中使用它們。

檢測(cè)移動(dòng)物體的方法

1. 基本運(yùn)動(dòng)檢測(cè)

第一種方法也是最直觀(guān)的方法是計(jì)算幀與幀之間,或一個(gè)被認(rèn)為是“背景”的幀和所有其他幀之間的差異。這個(gè)想法在最高層次上相當(dāng)簡(jiǎn)單:首先,保存第一幀。保存后,將其與新幀進(jìn)行比較。通過(guò)逐像素比較,簡(jiǎn)單地從兩幅圖像中減去。通過(guò)這種方式,你將獲得移動(dòng)物體。

這種技術(shù)實(shí)現(xiàn)起來(lái)相當(dāng)快,但并不適合應(yīng)用,因?yàn)槟阈枰獙⒛J(rèn)幀設(shè)置為背景,而背景在你的應(yīng)用中可能不會(huì)保持恒定。

想象一下,你正在檢測(cè)汽車(chē)。設(shè)置一個(gè)默認(rèn)背景并不會(huì)有效,因?yàn)槠?chē)在不斷移動(dòng),一切都在變化。光線(xiàn)在變化,物體在移動(dòng)。例如,你將第一幀設(shè)置為背景圖像,背景圖像中有3輛汽車(chē),但僅僅一秒鐘后,它們就不會(huì)再存在,因?yàn)樗鼈冊(cè)谝苿?dòng)。因此,背景圖像變得不準(zhǔn)確,因?yàn)橐磺卸荚谘杆僮兓?。因此,算法不?huì)很準(zhǔn)確,特別是在環(huán)境快速變化的情況下。

看看圖像;算法是工作的,但不是很準(zhǔn)確??纯醋筮叺膱D像;有一些無(wú)意義的區(qū)域。那是因?yàn)樵谝曨l中,背景幾乎每秒鐘都在變化,但在算法中,背景是恒定的。

左邊的圖像顯示了默認(rèn)背景幀和當(dāng)前幀之間的差異,而右邊的圖像顯示了帶有邊界框的當(dāng)前幀

我想你已經(jīng)理解了基本運(yùn)動(dòng)檢測(cè)的主要思想。根據(jù)你的期望,它可能有用。如果你不期望高精度,你可以考慮使用它。為了解決我上面討論的問(wèn)題,背景減除器開(kāi)始發(fā)揮作用?,F(xiàn)在是時(shí)候談?wù)劚尘皽p除和減除器了。

2. 背景減除 

背景減除是計(jì)算機(jī)視覺(jué)中的一項(xiàng)基本技術(shù),用于在視頻流中將移動(dòng)物體從背景中隔離出來(lái)。通過(guò)將視頻中的每一幀與背景模型進(jìn)行比較,可以識(shí)別出顯著差異的區(qū)域作為潛在的前景物體。然后,這個(gè)前景信息可以用于各種目的,包括目標(biāo)檢測(cè)和追蹤。背景減除通常是許多目標(biāo)追蹤和檢測(cè)算法中的關(guān)鍵步驟。

在背景減除中,背景圖像不是恒定的;由于光線(xiàn)變化、物體移動(dòng)和場(chǎng)景動(dòng)態(tài)等各種因素,它會(huì)隨著時(shí)間變化。背景減除算法的目標(biāo)是適應(yīng)性地建模和更新背景,以在變化的環(huán)境中準(zhǔn)確檢測(cè)前景物體。通過(guò)這種方式,背景問(wèn)題得到了解決。

在 OpenCV 中,背景減除器可以檢測(cè)陰影,并且通過(guò)閾值處理,它們可以從減除器檢測(cè)到的物體中排除陰影。這確實(shí)是準(zhǔn)確檢測(cè)物體的一個(gè)非常重要的特性,因?yàn)槲醋R(shí)別的陰影區(qū)域可能被減除器錯(cuò)誤地解釋為單獨(dú)的移動(dòng)物體,這是不可取的。

使用 OpenCV 中的背景減除器

Opencv 有幾種不同的背景減除器。我將使用其中兩個(gè)最著名的減除器:

  • K-最近鄰 (KNN)
  • 高斯混合 (MOG2)

我將只解釋 MOG2 如何進(jìn)行背景減除,但我將使用這兩種方法來(lái)檢測(cè)和追蹤視頻。

下面是 MOG2 如何進(jìn)行背景減除的:

  • 初始化:初始化 K 個(gè)高斯分布的混合,以模擬場(chǎng)景的背景。每個(gè)像素的背景模型由高斯混合表示,K 是一個(gè)預(yù)定義的參數(shù)。
  • 適應(yīng):隨著時(shí)間的推移,更新每個(gè)像素的背景模型,調(diào)整高斯分布的參數(shù)以適應(yīng)場(chǎng)景的變化。
  • 前景檢測(cè):根據(jù)高斯混合模型計(jì)算每個(gè)像素屬于背景的概率。概率低的像素被分類(lèi)為前景。
  • 更新背景:對(duì)于被分類(lèi)為背景的像素,更新高斯分布以納入新的觀(guān)察結(jié)果并適應(yīng)場(chǎng)景的變化
  • 后處理:應(yīng)用形態(tài)學(xué)操作(腐蝕、膨脹..)或其他技術(shù)來(lái)細(xì)化前景掩碼并去除噪聲。

代碼 / 檢測(cè)和追蹤移動(dòng)物體

在代碼中,我已經(jīng)解釋了大部分過(guò)程,但理解它的最佳方式是復(fù)制代碼并使用 cv2.imshow 函數(shù)觀(guān)察每個(gè)操作后的每一幀。

Subtraction

Threshold

Dilation


# import libraries
import cv2
import numpy as np

# KNN
KNN_subtractor = cv2.createBackgroundSubtractorKNN(detectShadows = True) # detectShadows=True : exclude shadow areas from the objects you detected

# MOG2
MOG2_subtractor = cv2.createBackgroundSubtractorMOG2(detectShadows = True) # exclude shadow areas from the objects you detected

# choose your subtractor
bg_subtractor=MOG2_subtractor

camera = cv2.VideoCapture("resources/run.mp4")

while True:
    ret, frame = camera.read()

    # Every frame is used both for calculating the foreground mask and for updating the background. 
    foreground_mask = bg_subtractor.apply(frame)

    # threshold if it is bigger than 240 pixel is equal to 255 if smaller pixel is equal to 0
    # create binary image , it contains only white and black pixels
    ret , treshold = cv2.threshold(foreground_mask.copy(), 120, 255,cv2.THRESH_BINARY)
    
    #  dilation expands or thickens regions of interest in an image.
    dilated = cv2.dilate(treshold,cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)),iterations = 2)
    
     # find contours 
    contours, hier = cv2.findContours(dilated,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # check every contour if are exceed certain value draw bounding boxes
    for contour in contours:
        # if area exceed certain value then draw bounding boxes
        if cv2.contourArea(contour) > 50:
            (x,y,w,h) = cv2.boundingRect(contour)
            cv2.rectangle(frame, (x,y), (x+w, y+h), (255, 255, 0), 2)

    cv2.imshow("Subtractor", foreground_mask)
    cv2.imshow("threshold", treshold)
    cv2.imshow("detection", frame)
    
    if cv2.waitKey(30) & 0xff == 27:
        break
        
camera.release()
cv2.destroyAllWindows()

責(zé)任編輯:趙寧寧 來(lái)源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2021-01-11 21:08:22

物聯(lián)網(wǎng)資產(chǎn)跟蹤IOT

2025-10-20 08:52:00

2024-07-30 14:45:08

2017-08-31 08:10:38

傳感器無(wú)人機(jī)攝像頭

2024-12-25 16:35:53

2017-07-11 07:54:00

無(wú)線(xiàn)網(wǎng)絡(luò)信息化工業(yè)4.0

2025-02-17 07:00:00

ORB對(duì)象跟蹤器計(jì)算機(jī)視覺(jué)

2010-08-11 10:58:06

AndroidAndroid NDK

2025-09-26 09:12:49

AI模型視覺(jué)

2023-12-26 09:29:12

自動(dòng)駕駛數(shù)據(jù)

2023-10-12 09:21:41

Java圖像

2022-07-21 10:02:47

SonarQube代碼Java

2024-07-17 10:30:00

2020-08-25 11:36:44

無(wú)人機(jī)倉(cāng)儲(chǔ)物流

2020-03-20 10:10:21

機(jī)器人人工智能系統(tǒng)

2012-08-14 09:20:00

Python

2024-12-19 08:00:00

FAST算法OpenCV目標(biāo)跟蹤

2024-10-28 17:17:32

2024-06-28 09:20:29

2020-12-09 14:13:37

人工智能機(jī)器學(xué)習(xí)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)