画像を足し合わせる

2つのMatを入力に、その和を求めることができます。下の例では、上段のそれぞれ円が描画されたMatを足し合わせています。下段左は単純な和、下段右は重み付きの和です。単純な和がimg1+img2で表されるとするなら、重み付きの和とはすなわち、img1*a+img2*b+cを計算します。下のコードでは、addWeighted(img1, 1, img2, 2, 20, output_img2)となっているので、out_img2にimg1*1+img2*2+20を代入しています。足し算に関数を使わず、+記号を用いることもできます。同様に、掛け算なら*記号、引き算なら-記号を使うことができます。

add1

add2

addo1

addo2

#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);
    
    Mat output_img1;
    Mat output_img2;
    
    add(img1,img2,output_img1); //単にoutput_img1=img1+img2;としてもよい
    imshow("1",output_img1);
    
    addWeighted(img1, 1, img2, 2, 20, output_img2); //単にoutput_img1=img1*1+img2*2+20;としてもよい
    imshow("2",output_img2);
    
    waitKey(0);
    return 0;
}