OpenCV基於背景減除實現行人計數

2022-09-20 08:57:08 字數 1645 閱讀 8755

目錄

本文將使用opencv c++ 對**中的**量進行統計。

原圖如圖所示。本案例的需求是想要統計畫麵中的**量。畫面中走動的行人可以看作是前景,那麼我們就需要將前景、背景分割出來。我們可以使用opencv提供的backgroundsubtractormog2 高斯混合模型,將行人從畫面中分割出來,然後提取輪廓就可以統計**量了。

ptrmog = createbackgroundsubtractormog2();

mog->apply(frame, mask);

使用上面兩行**就可以建立高斯混合背景提取器。傳入原圖,返回背景減除結果。如上圖所示。接下來只需對上圖進行一些簡單操作,再提取輪廓就可以進行**統計了。

threshold(mask, mask, 200, 255, thresh_binary );

morphologyex(mask, mask, morph_open, kernel);

dilate(mask, mask, kernel1);

進行二值化、形態學等操作可以將行人作為乙個獨立個體分割出來。效果如圖。

將上面的二值影象進行輪廓檢測,然後統計有效輪廓就可以完成物件計數了。

vector>contour程式設計客棧s;

vector>effectivecontours;

findcontours(mask, contours, retr_external, chain_approx_******);

for (int i = 0; i < contours.size(); i++)

}char text[10];

for (int i = 0; i < effectivecontours.size(); i++)

最終效果如圖所示。

#include

#include

using namespace std;

using names程式設計客棧pace cv;

int main()

ptrmog = createbackgroundsubtractormog2();

mat kernel = getstructuringelement(morph_rect, size(3, 5));

mat kernel1 = getstructuringelement(morph_rect, size(7, 3));

mat frame, mask;

while (capture.read(frame))

} char text[10];

for (int i = 0; i < effectivecontours.size(); i++)

imshow("frame", frame);

imshow("mask", mask);

char key = waitkey(10);

if (key == 27)

}destroyallwindows();

capture.release();

system("pause");

return 0;

}本文使用opencv c++ 基於背景減除進行**計數,關鍵步驟有以下幾點。

1、使用backgroundsubtractormog2 將前景從背景中分割出來。

2、將分割出來的前景進行輪廓提取,從而統計出**量。

OpenCV之背景減除

背景減除,官網是這樣介紹的。背景減法 bs 是通過使用靜態相機來生成前景蒙版 即,包含屬於場景中的運動物件的畫素的二進位制影象 的通用且廣泛使用的技術。顧名思義,bs計算前景蒙版,在當前幀和背景模型之間執行減法運算,其中包含場景的靜態部分,或者更一般而言,考慮到所觀察場景的特徵,可以視為背景的所有內...

運動目標檢測OpenCV背景減除法

背景減除法 1.gmm mog2演算法,高斯混合模型分離演算法,它為每個畫素選擇適當數量的高斯分布 函式 cv2.createbackgroundsubtractormog2 int history 500,double varthread 16,bool detectshadows true 2....

計算機視覺 基於自組織背景減除的運動目標檢測演算法

在改 中,作者提出了一種基於自組織神經網路 self organizing through artificial neural networks 的背景減除演算法 簡稱sobs 1 背景建模 根據神經網路的特性,乙個網路輸入節點,對應多個中間節點。文中在背景建模階段,也採用了這種思路,將背景模型中的...