opencv3/C++实现视频背景去除建模(BSM)
视频背景建模主要使用到:
高斯混合模型(MixtureOfGauss,MOG)
createBackgroundSubtractorMOG2(inthistory=500,doublevarThreshold=16,booldetectShadows=true);
K最近邻(k-NearestNeighbor,kNN)
createBackgroundSubtractorKNN(inthistory=500,doubledist2Threshold=400.0,booldetectShadows=true);
history:history的长度。
varThreshold:像素和模型之间马氏距离的平方的阈值。
detectShadows:默认为true,检测阴影并标记它们(影子会被标记为灰色)。会降低了部分速度。
实例:
#includeusingnamespacecv; intmain() { VideoCapturecapture; capture.open("E:/image/01.avi"); if(!capture.isOpened()) { printf("cannotopenvideofile\n"); return-1; } Matframe; namedWindow("input",CV_WINDOW_AUTOSIZE); namedWindow("MOG2",CV_WINDOW_AUTOSIZE); namedWindow("KNN",CV_WINDOW_AUTOSIZE); MatmaskMOG2,maskKNN; Ptr pMOG2=createBackgroundSubtractorMOG2(500,25,true); Ptr pKNN=createBackgroundSubtractorKNN(); Matkernel=getStructuringElement(MORPH_RECT,Size(5,5)); while(capture.read(frame)) { imshow("input",frame); pMOG2->apply(frame,maskMOG2); pKNN->apply(frame,maskKNN); //对处理后的帧进行开操作,减少视频中较小的波动造成的影响 morphologyEx(maskMOG2,maskMOG2,MORPH_OPEN,kernel,Point(-1,-1)); morphologyEx(maskKNN,maskKNN,MORPH_OPEN,kernel,Point(-1,-1)); imshow("MOG2",maskMOG2); imshow("KNN",maskKNN); waitKey(3); } capture.release(); return0; }
视频中移动的玻璃球:
MOG分离出的小球区域:
KNN分离出的小球区域:
以上这篇opencv3/C++实现视频背景去除建模(BSM)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。