例項 python和opencv構建運動檢測器

2021-10-20 16:37:03 字數 1970 閱讀 7318

照著乙個示例跑,目標本是捕獲進入攝像頭的第一幀然後會一直追蹤這乙個物體,如果出現的話會框出來,但是不知道什麼原因,第乙個框出來之後移動到別的地方還是會框別的東西,然後攝像頭開啟幾秒就自動停止了還報錯

0)#高斯模糊去除雜訊

if firstframe is

none

: firstframe = gray

continue

#捕獲第乙個灰度幀 得到第一幀後不進行後續處理

delta_frame = cv2.absdiff(firstframe,gray)

# ,我們需要找出第一幀和當前幀之間的區別。因此,我們使用absdiff函式並將得到的結果稱為delta幀。對於我們的用例來說,僅僅找到乙個差異是不夠的,所以我們需要定義乙個畫素閾值,它可以被視為真實的物件。我們可以選擇30畫素作為標準閾值,並將標準閾值的顏色定義為白色(顏色**:255). 二元閾值函式thresh_binary返回乙個元組值,其中只有第二項([0]是第一項,[1]是第二項)包含生成的閾值幀。二元閾值函式用於處理含有2個離散值的非連續函式:如0或1。如果攝影機前面沒有物件,我們將當前幀的狀態視為0;如果攝影機前面存在物件,則將當前幀的狀態視為1。

thresh_frame = cv2.threshold(delta_frame,30,

255,cv2.thresh_binary)[1

] thresh_frame = cv2.dilate(thresh_frame,

none

,iterations=3)

# 在膨脹函式dilate中,我們可以通過設定迭代次數來設定平滑度。迭代次數越多,平滑度越高,處理時間也就越長。因此,建議保持標準化設定為3。膨脹函式中的「none」引數表示我們的應用中不需要元素結構。

#宣告元組的語法 (cnts,_)

(cnts,_)

= cv2.findcontours(thresh_frame.copy(

)for contours in cnts :

if cv2.contourarea(contours)

<

10000

:continue

if cv2.contourarea(contours)

<

20000

: status =

1(x,y,w,h)

= cv2.boundingrect(contours)

cv2.rectangle(colorframe,

(x,y)

,(x+w,y+h),(

0,0,

255),3

) cv2.imshow(

"cc"

,colorframe)

key = cv2.waitkey(1)

if key ==

ord(

'q')

:break

顯然這裡有什麼問題。

留待解決:高斯平滑引數的獲取

opencv 例項演示

1.腐蝕膨脹 main.cpp include opencv2 imgproc imgproc.hpp include opencv2 highgui highgui.hpp include highgui.h include include erosion腐蝕 dilation膨脹 滑動條用來控制...

opencv程式設計例項

void imagestitch int index,mat image1,mat image2,const mat comframe premaxloc.x 5 偏移量x屬於0 20,x取任意位置均可以。保持第一張寬度為800 120 5 685 premaxloc.y 10 偏移量y屬於0 20...

opencv例項練習

利用滑鼠畫矩形或者線段 import cv2 as cv import numpy as np drawing false 如果 mode為true繪製矩形。按下 m 變成繪製曲線。預設是false 滑鼠按下是true mode true ix,iy 1,1 def draw circle even...