运动目标检测小程序之修改版
2014-05-11 17:35
295 查看
修复了上一个程序的错误。现在运行到视频的最后一帧自己会停下了哦~ 而且效果也比上次好多鸟~ 敬请期待生成运动轨迹! #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <cvaux.h>//必须引此头文件1 #define threshold_diff1 20 //设置简单帧差法阈值 #define threshold_diff2 20 //设置简单帧差法阈值 using namespace cv; using namespace std; int main(int argc,unsigned char* argv[]) { Mat img_src1,img_src2,img_src3;//3帧法需要3帧图片 Mat img_dst,gray1,gray2,gray3; Mat gray_diff1,gray_diff2;//存储2次相减的图片 Mat gray_diff11,gray_diff12; Mat gray_diff21,gray_diff22; Mat gray;//用来显示前景的 bool pause=false; VideoCapture vido_file("bike.avi");//在这里改相应的文件名 namedWindow("foreground",0); BackgroundSubtractorMOG2 mog; BackgroundSubtractorMOG2 mog2;//用于显示背景 Mat foreground; Mat background; Mat foreground2; int framenum = vido_file.get(CV_CAP_PROP_FRAME_COUNT); cout<<framenum<<endl; Mat frame; int k=2; for (;;) { if(k<(framenum-2)) { k++; cout<<k<<endl; vido_file >>img_src1; cvtColor(img_src1,gray1,CV_BGR2GRAY); blur(gray1,gray1,Size(3,3)); waitKey(33); vido_file >>img_src2; cvtColor(img_src2,gray2,CV_BGR2GRAY);blur(gray2,gray2,Size(3,3)); imshow("video_src",img_src2);// waitKey(33); vido_file >>img_src3; cvtColor(img_src3,gray3,CV_BGR2GRAY); blur(gray3,gray3,Size(3,3)); Sobel(gray1,gray1, CV_8U,1,0,3,0.4,128); Sobel(gray2,gray2, CV_8U,1,0,3,0.4,128); Sobel(gray3,gray3, CV_8U,1,0,3,0.4,128); subtract(gray2,gray1,gray_diff11);//第二帧减第一帧 subtract(gray1,gray2,gray_diff12); add(gray_diff11,gray_diff12,gray_diff1); subtract(gray3,gray2,gray_diff21);//第三帧减第二帧 subtract(gray2,gray3,gray_diff22); add(gray_diff21,gray_diff22,gray_diff2); for(int i=0;i<gray_diff1.rows;i++) for(int j=0;j<gray_diff1.cols;j++) { if(abs(gray_diff1.at<unsigned char>(i,j))>=threshold_diff1)//这里模板参数一定要用unsigned char,否则就一直报错 gray_diff1.at<unsigned char>(i,j)=255; //第一次相减阈值处理 else gray_diff1.at<unsigned char>(i,j)=0; if(abs(gray_diff2.at<unsigned char>(i,j))>=threshold_diff2)//第二次相减阈值处理 gray_diff2.at<unsigned char>(i,j)=255; else gray_diff2.at<unsigned char>(i,j)=0; } bitwise_and(gray_diff1,gray_diff2,gray); // 运动前景检测,并更新背景 mog(img_src2, foreground, 0.01); // dilate(foreground, foreground, Mat()); mog2( img_src2, foreground2, 0.04); // 腐蚀 erode(foreground, foreground, Mat()); // 膨胀 dilate(foreground, foreground, Mat()); mog2.getBackgroundImage( background); imshow("高斯模型前景", foreground); gray=gray&foreground; dilate(gray,gray,Mat());erode(gray,gray,Mat());dilate(gray,gray,Mat()); imshow("foreground",gray); vido_file.set( CV_CAP_PROP_POS_FRAMES,k); } imshow("高斯模型背景", background); if( cvWaitKey(33) >= 0 ) break; } return 0; }
相关文章推荐
- opencv程序十七:运动目标检测之背景减除法
- opencv程序十八:运动目标检测之三帧差分法
- 目标检测程序开发(二)——Boosting算法简介
- 【OpenCV】OpenCV3的第二天——光流法(Optial Flow)运动目标检测
- 收集的运动目标检测,阴影检测的标准测试视频
- 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法
- 第五章 运动目标检测技术
- valgind使用错误——检测不同位目标程序
- 运动中的摄像机检测目标
- DM8261芯片检测修改程序QCTool_1.0.0.3_110622
- 运动目标检测与跟踪
- OpenCV实现静止背景下运动目标的检测
- OpenCV学习之寻找轮廓实现视频流的运动目标检测
- OpenCV_基于混合高斯模型GMM的运动目标检测
- OpenCV2帧间差分检测运动目标
- 对视频序列的 运动检测 目标跟踪(运动目标的检测与跟踪)
- 如何用OpenCV自带的adaboost程序训练并检测目标
- 运动目标检测——研究方向与难点
- 运动目标检测、阴影检测及目标跟踪中用得到的标准测试视频下载(大量IBM提供视频)
- 目标检测程序开发(三)——级联分类器训练