opencv3 图像差分

#include<opencv.hpp>  
#include <algorithm>
#include<iostream>

using namespace cv;
using namespace std;

int main()
{

	cv::Mat image1, image2;

	image1 = cv::imread("F:\\ebook\\opencv\\LearningOpenCV3\\test\\test\\zhen1.bmp", cv::IMREAD_GRAYSCALE);
	image2 = cv::imread("F:\\ebook\\opencv\\LearningOpenCV3\\test\\test\\zhen2.bmp", cv::IMREAD_GRAYSCALE);

	cv::Mat resultimage(image1.rows,image1.cols,CV_8UC1);

	cv::imshow("image1", image1);
	cv::waitKey();
	cv::imshow("image2", image2);
	cv::waitKey();

	//图像差分
	cv::absdiff(image1, image2, resultimage);

	cv::imshow("diff result", resultimage);
	cv::imwrite("result.jpg", resultimage);

	cv::waitKey();

	return 0;
}

结果如图:
opencv3 图像差分
opencv3 图像差分
opencv3 图像差分
由于用于差分的图像不单纯是背景,所以检测出了所有移动区域,有的甚至是重复的。
上面代码中的cv::absdiff函数,经试验,效果与resultimage=image1-image2效果一致。

//图像差分
	//cv::absdiff(image1, image2, resultimage);
	resultimage = image1 - image2;