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