简单帧差法
2016-07-16 11:11
176 查看
代码来自:http://www.cnblogs.com/tornadomeet/archive/2012/05/01/2477629.html
效果:
#include <string> #include <iostream> #include <stdio.h> #include <fstream> #include<math.h> #include <opencv2\opencv.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\core\core.hpp> #define threshold_diff 18 //设置简单帧差法阈值 using namespace cv; using namespace std; int main(int argc, unsigned char* argv[]) { Mat img_src1, img_src2, img_dst, gray1, gray2, gray_diff; bool pause = false; VideoCapture vido_file("a.avi");//在这里改相应的文件名 namedWindow("foreground", 0); for (;;) { if (!pause ) { vido_file >> img_src1; //因为视频文件帧数已经固定了,所以每次到这句语句都是读取相邻的帧数,没到时间视频并不向前走 if (img_src1.empty()) //【】没有这个判断的话,视频播放完了会有内存溢出错误,所以播完就直接break! break; //GaussianBlur(img_src1, img_src1, Size(3, 3), 60); cvtColor(img_src1, gray1, CV_BGR2GRAY); imshow("video_src", img_src1);//可以事先不用新建一个窗口 waitKey(5); vido_file >> img_src2; //GaussianBlur(img_src2, img_src2, Size(3, 3), 60); cvtColor(img_src2, gray2, CV_BGR2GRAY); imshow("video_src", img_src2);//可以事先不用新建一个窗口 waitKey(5); subtract(gray1, gray2, gray_diff); GaussianBlur(gray_diff, gray_diff, Size(3, 3), 0,0); for (int i = 0; i<gray_diff.rows; i++) for (int j = 0; j<gray_diff.cols; j++) if (abs(gray_diff.at<unsigned char>(i, j)) >= threshold_diff)//这里模板参数一定要用unsigned char,否则就一直报错 gray_diff.at<unsigned char>(i, j) = 255; else gray_diff.at<unsigned char>(i, j) = 0; imshow("foreground", gray_diff); } char c = (char)waitKey(10); if (c == 27) { break; } if (c == ' ') pause = !pause; } return 0; }
效果:
相关文章推荐
- GP学习(四)—Running a geoprocessing tool using background geoprocessing
- python字符串replace()方法
- Java-IO之DeflaterOutputStream和InflaterOutputStream
- C语言的运算符、位操作
- map, set
- cas client 配置及其实现。
- HTTP之referer
- Scala中的隐式转换、隐式参数、隐式类
- jquary学习之路--1
- Leetcode题解 119. Pascal's Triangle II
- HDU 1879 继续畅通工程(最小生成树Kruskal)
- hdu 5162 Jump and Jump...(模拟)
- STM32注释风格参考
- 【gcc】warning: control reaches end of non-void function
- s-palindrome
- 某单位OTT TV解决方案 20140710
- selenium测试(Java)--告警框处理(十四)
- 关于Python2中utf8,gbk,ascii的编码问题
- 10. Regular Expression Matching
- mysql安装 for windows