画像の差の絶対値を計算する

2つのMatを入力に、その差の絶対値を求めることができます。今回は2種類の方法で計算しています。また、ゼロでないpixelの数をcountNonZero関数で求めています。2つのやり方のどちらでも同じ非ゼロpixel数が出力されることを確認してください。下の図は、上2つが入力画像、次の2つがそれぞれのパターンで入力画像の差の絶対値を計算した結果です。

add1

add2

absdiff

#include "opencv/cv.h"
#include "opencv/highgui.h"
using namespace cv;
int main(){
    Mat img1 = Mat::zeros(500, 500, CV_8UC1);
    circle(img1, cv::Point(200, 250), 100, Scalar(100), 30, 4);
    
    Mat img2 = Mat::zeros(500, 500, CV_8UC1);
    circle(img2, cv::Point(300, 250), 100, Scalar(50), 30, 4);
    
    //同じことを実行するコード パターン1
    Mat output_img1;
    absdiff(img1, img2, output_img1);
    printf("%d\n",countNonZero(output_img1));
    ///////////////////////
    
    
    //同じことを実行するコード パターン2
    Mat output_img2;
    output_img2 = abs(img1 - img2);
    printf("%d\n",countNonZero(output_img2));
    ///////////////////////
    
    imshow("1",output_img1);
    imshow("2",output_img1);
    
    waitKey(0);
    return 0;
}