opencv 帧差法 absdiff

来源:互联网 发布:建行信用卡 知乎 编辑:程序博客网 时间:2024/05/29 18:53

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  }


1 0
原创粉丝点击