opencv 帧差法 absdiff
2016-03-11 09:52
531 查看
opencv 帧差法 absdiff
opencv2.3.1里的以下函数可计算当前帧与背景之差的绝对值。cv::absdiff(backgroundImage,currentImage,foreground);
如果摄像机是固定的,那么我们可以认为场景(背景)大多数情况下是不变的,而只有前景(被跟踪的目标)会运动,这样就可以建立背景模型。通过比较当前帧和背景模型,就能轻松地跟踪目标运动情况了。这里,最容易想到的比较方式就是当前帧减去背景模型了
代码如下:
using namespace std;
using namespace cv;
int main(int argc,char * argv())
{
//读入视频
//VideoCapture capture("CarLights2.avi");
VideoCapture capture(0);
//namedWindow("camera",WINDOW_AUTOSIZE);
//namedWindow("moving area",WINDOW_AUTOSIZE);
Mat tempframe, currentframe, previousframe;
Mat frame;
int framenum = 0;
//读取一帧处理
while (true)
{
if(!capture.isOpened())
{
cout << "read video failure" << endl;
return - 1;
}
//tempframe = capture.read(frame);
capture >> frame;
tempframe = frame;
framenum++;
if (framenum == 1)
{
cvtColor(tempframe, previousframe, CV_BGR2GRAY);
}
if (framenum >= 2)
{
Mat currentframe1,currentframe2, currentframe3, currentframe4;
cvtColor(tempframe, currentframe, CV_BGR2GRAY);//转化为单通道灰度图,此时currentFrame已经存了tempFrame的内容
absdiff(currentframe,previousframe,currentframe);//做差求绝对值
threshold(currentframe, currentframe, 20, 255.0, CV_THRESH_BINARY);
dilate(currentframe, currentframe,Mat());//膨胀
erode(currentframe, currentframe,Mat());//腐蚀
//显示图像
imshow("camera", tempframe);
imshow("moving area", currentframe);
}
//把当前帧保存作为下一次处理的前一帧
//cvtColor(tempframe, previousframe, CV_BGR2GRAY);
waitKey(33);
}//end while
}
相关文章推荐
- Hadoop系列三:Hadoop之Pig篇
- Web性能压力测试工具之ApacheBench(ab)详解
- 微信开发环境搭建(Tomcat/Resin/Ap…
- PHP高并发高负载系统架构
- centos 5.4中mysql主从同步配置方法
- Topic On ARM Core
- 通过Python获取Linux系统所有分区和分区已使用空间占总空间的百分比
- log4j.properties详解和实例
- ps素材网站
- CentOS 7.0,启用iptables防火墙
- OC--copyWithZone:(NSZone *)zone
- 错误处理:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
- shell判断文件是否存在
- OpenCV Mat转IplImage陷阱
- Linux 消息队列编程
- Linux 共享内存编程
- Linux 信号量同步编程
- Linux 信号量互斥编程
- Linux 字符设备驱动模型
- Linux 内核链表