生活随笔
收集整理的這篇文章主要介紹了
使用OpenCV检测和追踪车辆
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
源文檔鏈接:http://blog.csdn.net/xfgryujk/article/details/61421763
完整源碼GitHub
使用高斯混合模型(BackgroundSubtractorMOG2)對背景建模,提取出前景使用中值濾波去掉椒鹽噪聲,再閉運算和開運算填充空洞使用cvBlob庫追蹤車輛,我稍微修改了cvBlob源碼來通過編譯
由于要對背景建模,這個方法要求背景是靜止的
另外不同車輛白色區(qū)域不能連通,否則會認為是同一物體
[cpp]?view plain
?copy void?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);?? ????????}?? ????}??
總結(jié)
以上是生活随笔為你收集整理的使用OpenCV检测和追踪车辆的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。