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