OpenCV实现帧差法
帧差法是运动目标检测中一个非常重要的方法,它的原理十分简单。思路是设置一个阈值,然后将视频中相邻的两帧相减,结果中大于阈值的地方就是运动区域。
帧差法的优势是运算量小,实时性好,可以获得不错的轮廓。缺点是不够精细,阈值过高容易漏检,过低则无法做到noise tolerance. 另外如果发生光照突变等情况,帧差法会把整副图像当成运动区域。
以下是实现的代码。
#include "highgui.h"
#include "cv.h"void main()
{CvCapture* capture;capture=cvCaptureFromFile("test.avi");//获取视频cvNamedWindow("camera",CV_WINDOW_AUTOSIZE);cvNamedWindow("moving area",CV_WINDOW_AUTOSIZE);IplImage* tempFrame;//用于遍历capture中的帧,通道数为3,需要转化为单通道才可以处理IplImage* currentFrame;//当前帧IplImage* previousFrame;//上一帧/*CvMat结构,本质上和IplImage差不多,但是因为IplImage里的数据只能用uchar的形式存放,当需要这些图像数据看作数据矩阵来运算时,0~255的精度显然满足不了要求;
然而CvMat里却可以存放任意通道数、任意格式的数据*/CvMat* tempFrameMat;CvMat* currentFrameMat; //IplImage要转成CvMat进行处理CvMat* previousFrameMat;int frameNum=0;while(tempFrame=c
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
