生活随笔
收集整理的這篇文章主要介紹了
OpenCV检测和追踪车辆
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章出處:https://blog.csdn.net/xfgryujk/article/details/61421763
完整源碼GitHub
使用高斯混合模型(BackgroundSubtractorMOG2)對背景建模,提取出前景使用中值濾波去掉椒鹽噪聲,再閉運算和開運算填充空洞使用cvBlob庫追蹤車輛,我稍微修改了cvBlob源碼來通過編譯
由于要對背景建模,這個方法要求背景是靜止的
另外不同車輛白色區域不能連通,否則會認為是同一物體
[cpp]?view plain
?copyvoid?processVideo(char*?videoFilename)??{??????Mat?frame;???????Mat?fgMaskMOG2;???????Mat?bgImg;???????Ptr<BackgroundSubtractorMOG2>?pMOG2?=?createBackgroundSubtractorMOG2(200,?36.0,?false);?????????while?(true)??????{??????????VideoCapture?capture(videoFilename);??????????if?(!capture.isOpened())??????????{??????????????cerr?<<?"Unable?to?open?video?file:?"?<<?videoFilename?<<?endl;??????????????return;??????????}????????????int?width?=?(int)capture.get(CV_CAP_PROP_FRAME_WIDTH);??????????int?height?=?(int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);????????????unique_ptr<IplImage,?void(*)(IplImage*)>?labelImg(cvCreateImage(cvSize(width,?height),?IPL_DEPTH_LABEL,?1),???????????????[](IplImage*?p){?cvReleaseImage(&p);?});??????????CvBlobs?blobs;??????????CvTracks?tracks;????????????while?(true)??????????{????????????????????????????int?key?=?waitKey(1);??????????????if?(key?==?'q'?||?key?==?27)??????????????????return;??????????????if?(!capture.read(frame))??????????????????break;??????????????????????????????pMOG2->apply(frame,?fgMaskMOG2);??????????????pMOG2->getBackgroundImage(bgImg);??????????????imshow("BG",?bgImg);??????????????imshow("Original?mask",?fgMaskMOG2);??????????????????????????????medianBlur(fgMaskMOG2,?fgMaskMOG2,?5);??????????????imshow("medianBlur",?fgMaskMOG2);??????????????morphologyEx(fgMaskMOG2,?fgMaskMOG2,?MORPH_CLOSE,?getStructuringElement(MORPH_RECT,?Size(5,?5)));???????????????morphologyEx(fgMaskMOG2,?fgMaskMOG2,?MORPH_OPEN,?getStructuringElement(MORPH_RECT,?Size(5,?5)));???????????????imshow("morphologyEx",?fgMaskMOG2);??????????????????????????????cvLabel(&IplImage(fgMaskMOG2),?labelImg.get(),?blobs);??????????????cvFilterByArea(blobs,?64,?10000);??????????????cvUpdateTracks(blobs,?tracks,?10,?90,?30);??????????????cvRenderTracks(tracks,?&IplImage(frame),?&IplImage(frame));??????????????????????????????imshow("Frame",?frame);????????????????key?=?waitKey(30);??????????}??????}??} ?
總結
以上是生活随笔為你收集整理的OpenCV检测和追踪车辆的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。