目錄
本文將使用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 背景建模 根據神經網路的特性,乙個網路輸入節點,對應多個中間節點。文中在背景建模階段,也採用了這種思路,將背景模型中的...