opecncv之运动物体检测

来源:互联网 发布:移动端网页聊天室源码 编辑:程序博客网 时间:2024/05/21 18:37

1)运动物体检测简介
运动物体检测就是在视频(视频文件/摄像头获取)中检测运动物体(目标)。opencv中常用的运动物体检测方法有背景减法,帧差法,光流法,运动物体检测广泛应用于视频安全监控,,车辆检测等方面
背景减法:就是用原图像减去背景模型,剩下的就是前景图像,即运动目标
帧差法:就是利用相邻的两帧或三帧图像,利用像素之间的差异性,判断是否有运动目标
视频就是一帧一帧图像组成的
求图像差异最基本的就是图像减法(-,suntract,absdiff)
- /Subtract —–a-b <0 —0
-Adsdiff —————|a-b|>0

2)背景减法
基本步骤:
原图—背景—-阈值处理—去除噪声(腐蚀 滤波)—膨胀连通—-查找轮廓—-外接矩形(椭圆/圆)
3)帧差法
基本步骤 :
相邻帧相减—阈值处理—-去除噪声(腐蚀滤波)—-膨胀连通—-查找轮廓—-外接矩形(椭圆/圆)

//两张图片的验证Mat img1=imread("1.bmp");Mat img2=imread("55.bmp");imshow("img1",img1);imshow("img2",img2);//Mat result=img2.clone();Mat gray1,gray2;cvtColor(img1,gray1,CV_BGR2GRAY);cvtColor(img2,gray2,CV_BGR2GRAY);Mat diff;adsdiff(gray1,gray2,diff);imshow("absdiss",diff);threshold(diff,diff,45,255,CV_THRESH_BINARY);imshow("threshold",diff);Mat element=getStructuringElement(MOORPH_RECT,Size(3,3));Mat element2=getStructuringElement(MORPH_RECT,Size(11,11));erode(diff,diff,element);imshow("erode",diff);dilate(diff,diff,element2);imshow("dilate",diff);vector<vector<Point>contours;vector<Vec4i>hierarcy;findContours(diff,contours,hierarcy,CV_RETR_EXTERNAL,CHAIN_APPROX_NONE);//查找轮廓vector<Rect>boundRect(contours.size());//定义外接矩形集合drawContours(img2,contours,-1,Scalar(0,0,255),1,8);//绘制轮廓int xo=0;yo=0;wo=0;ho=0;for(int i=0;i<contours.size();i++){  boundRect[i]=boundingRect((Mat)contours[i]);//查找每个轮廓的外接矩形  xo=boundRect[i].x;//获得第i个外接矩形的左上角的x坐标  yo=boundRect[i].y;//获得第i个外接矩形的左上角的y坐标  wo=boundRect[i].width;//获得第i个外接矩形的宽度  ho=boundRect[i].height;//获得第i个外接矩形的高度  rectangle(img2,Point(xo,yo),Point(xo+wo,yo+ho),Scalar(0,255,0),2,8);//绘制第i个外接矩形}imshow("result",img2);waitKey(0);视频要可以提取第一帧为背景帧
原创粉丝点击