opencv學習筆記四十四:移動物件統計
步驟:
- 利用背景消除法找到移動的物體;
- 預處理:進行中值濾波消除椒鹽噪聲,然後二值化再開操作;
- 尋找輪廓;
- 畫出輪廓最小矩形並統計。
#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main(int arc, char** argv) {
VideoCapture capture;
capture.open("vtest.avi");
namedWindow("input", CV_WINDOW_AUTOSIZE);
namedWindow("motion objects", CV_WINDOW_AUTOSIZE);
Mat frame,mogMask;
//例項化背景消除法模型
Ptr<BackgroundSubtractorMOG2>mog2 = createBackgroundSubtractorMOG2();
//定義結構元素
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
//定義發現的輪廓
vector<vector<Point>>contours;
//層次
vector<Vec4i>hierarchy;
int count = 0;
//定義字元陣列
char numText[2];
while (capture.read(frame)) {
imshow("input", frame);
//應用混合高斯模型去除背景
mog2->apply(frame, mogMask);
//中值濾波
medianBlur(mogMask, mogMask, 3);
//得到的結果為灰度影象,對其進行二值化
threshold(mogMask, mogMask, 100, 255, THRESH_BINARY);
//開操作
morphologyEx(mogMask, mogMask, MORPH_OPEN, kernel);
//尋找最外層輪廓
findContours(mogMask, contours, hierarchy, 0, CHAIN_APPROX_SIMPLE, Point(0, 0));
count = 0;
for (int i = 0; i < contours.size(); i++) {
//drawContours(frame, contours, i, Scalar(255, 0, 0));
double area = contourArea(contours[i]);
if (area < 1000)continue;//去掉面積小於1000的輪廓
Rect selection = boundingRect(contours[i]);
if (selection.width < 30 || selection.height < 30)continue;//去掉明顯不符合被檢測物體形狀的輪廓
count++;
rectangle(frame, selection, Scalar(0, 0, 255), 2);
//sprintf和平時我們常用的printf函式的功能很相似。sprintf函式列印到字串中,而printf函式列印輸出到螢幕上
sprintf_s(numText, "%d", count);
putText(frame, numText, Point(selection.x, selection.y), CV_FONT_NORMAL, FONT_HERSHEY_PLAIN,Scalar(0,255,0), 1);
}
imshow("motion objects", frame);
char c = waitKey(100);
if (c == 27) { break; }
}
capture.release();
waitKey(0);
return 0;
}
相關文章
- opencv學習筆記(一)OpenCV筆記
- 移動地理資訊系統學習筆記筆記
- 統計學習方法筆記筆記
- Promise 物件學習筆記Promise物件筆記
- OpenCV 名稱空間學習筆記OpenCV筆記
- OpenCV學習筆記(4)——mixChannels函式OpenCV筆記函式
- OpenCV學習筆記(5)——normalize函式OpenCV筆記ORM函式
- 學習筆記——物件方法整理筆記物件
- 【opencv學習筆記】001之opencv配置(win10+VS2015+OpenCV3.1.0)OpenCV筆記Win10
- OpenCV學習筆記-Harris角點檢測OpenCV筆記
- 統計學習方法筆記-感知機學習方法筆記
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- 【統計學習方法|筆記】第1章 統計學習方法理論筆記
- 【python 物件導向】 python物件學習筆記《1》Python物件筆記
- OpenCV學習筆記(3)——Scalar資料型別理解OpenCV筆記資料型別
- 學習筆記1熱力學與統計物理筆記
- 程式設計基礎·Java學習筆記·物件導向(下)程式設計Java筆記物件
- Python3:物件導向程式設計學習筆記(2)Python物件程式設計筆記
- 統計學習方法筆記-EM演算法筆記演算法
- MogDB/openGauss學習筆記-獲取物件DDL筆記物件
- Flutter學習筆記(8)--Dart物件導向Flutter筆記Dart物件
- js高階 物件導向 學習筆記JS物件筆記
- Python 3 學習筆記之——物件導向Python筆記物件
- 學習筆記——瀏覽器物件模型(Window)筆記瀏覽器物件模型
- Python學習筆記|Python之物件導向Python筆記物件
- opencv學習筆記(二)-- 載入、修改和儲存影像OpenCV筆記
- C#學習筆記(六)——物件導向程式設計簡介C#筆記物件程式設計
- 彙編學習筆記之轉移指令筆記
- 設計模式學習筆記設計模式筆記
- 學習筆記-設計模式筆記設計模式
- PHP 手冊 (類與物件) 學習筆記七:物件繼承PHP物件筆記繼承
- CMake構建學習筆記13-opencv庫的構建筆記OpenCV
- JS語言精粹學習筆記--物件字面量JS筆記物件
- ES學習筆記(11)--ES6中物件筆記物件
- ES6學習筆記(三)【函式,物件】筆記函式物件
- JavaScript中的物件學習筆記(屬性操作)JavaScript物件筆記
- JavaScript中的物件學習筆記(概述和建立)JavaScript物件筆記
- Python學習筆記5——一切皆物件Python筆記物件