帧差法——动态检测——统计车流量
生活随笔
收集整理的這篇文章主要介紹了
帧差法——动态检测——统计车流量
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
幀差法——?jiǎng)討B(tài)檢測(cè)——統(tǒng)計(jì)車流量
幀差法原理
幀間差分法是一種通過(guò)對(duì)視頻圖像序列的連續(xù)兩幀圖像做差分運(yùn)算獲取運(yùn)動(dòng)目標(biāo)輪廓的方法。當(dāng)監(jiān)控場(chǎng)景中出現(xiàn)異常目標(biāo)運(yùn)動(dòng)時(shí),相鄰兩幀圖像之間會(huì)出現(xiàn)較為明顯的差別,兩幀相減,求得圖像對(duì)應(yīng)位置像素值差的絕對(duì)值,判斷其是否大于某一閾值,進(jìn)而分析視頻或圖像序列的物體運(yùn)動(dòng)特性。
實(shí)現(xiàn)流程
實(shí)現(xiàn)效果
動(dòng)態(tài)檢測(cè)函數(shù)代碼
Mat MoveDetect(Mat frame1, Mat frame2) {Mat result = frame2.clone();Mat gray1, gray2;cvtColor(frame1, gray1, CV_BGR2GRAY);cvtColor(frame2, gray2, CV_BGR2GRAY);Mat diff;absdiff(gray1, gray2, diff);//兩幅圖做差imshow("absdiss", diff);threshold(diff, diff, 25, 255, CV_THRESH_BINARY);//二值化diffMat element = getStructuringElement(MORPH_RECT, Size(3, 3));//返回指定形狀與尺寸得結(jié)構(gòu)元素Mat element2 = getStructuringElement(MORPH_RECT, Size(19, 19));erode(diff, diff, element);//腐蝕函數(shù)medianBlur(diff, diff, 3);//中值濾波dilate(diff, diff, element2);//膨脹函數(shù) vector<vector<Point>> contours;vector<Vec4i> hierarcy;findContours(diff, contours, hierarcy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));//查找輪廓vector<vector<Point>>contours_poly(contours.size());vector<Rect> boundRect(contours.size()); //定義外接矩形集合 int x0 = 0, y0 = 0, w0 = 0, h0 = 0;for (int i = 0; i<contours.size(); i++){approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);//對(duì)圖像輪廓點(diǎn)進(jìn)行多邊形擬合:輪廓點(diǎn)組成的點(diǎn)集,輸出的多邊形點(diǎn)集,精度(即兩個(gè)輪廓點(diǎn)之間的距離),輸出多邊形是否封閉boundRect[i] = boundingRect(Mat(contours_poly[i]));if (boundRect[i].width>90 && boundRect[i].width<180 && boundRect[i].height>90 && boundRect[i].height<180) {//輪廓篩選 (90 180)x0 = boundRect[i].x;y0 = boundRect[i].y;w0 = boundRect[i].width;h0 = boundRect[i].height;rectangle(result, Point(x0, y0), Point(x0 + w0, y0 + h0), Scalar(0, 255, 0), 2, 8, 0);if ((y0 + h0 / 2 + 1) >= 198 && (y0 + h0 / 2 - 1) <= 202) {//經(jīng)過(guò)這條線(區(qū)間),車輛數(shù)量+1CarNum++;}}line(result, Point(0, 200), Point(720, 200), Scalar(0, 0, 255), 1, 8);//畫紅線Point org(0, 35);putText(result, "CarNum=" + intToString(CarNum), org, CV_FONT_HERSHEY_SIMPLEX, 0.8f, Scalar(0, 255, 0), 2);}return result; }完整代碼及實(shí)驗(yàn)使用視頻請(qǐng)到資源處下載
鏈接: https://download.csdn.net/download/weixin_46958585/12708964.
總結(jié)
以上是生活随笔為你收集整理的帧差法——动态检测——统计车流量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蓝桥杯官网 试题 PREV-278 历届
- 下一篇: unity3d脚本控制骨骼旋转