openCVを使用して、ある画像から別の画像を差し引くにはどうすればよいですか?
Ps .: C++ で実行する必要があるため、Python の実装は使用できません。
openCVを使用して、ある画像から別の画像を差し引くにはどうすればよいですか?
Ps .: C++ で実行する必要があるため、Python の実装は使用できません。
#include <cv.h>
#include <highgui.h>
using namespace cv;
Mat im = imread("cameraman.tif");
Mat im2 = imread("lena.tif");
Mat diff_im = im - im2;
イメージ名を変更します。また、それらが同じサイズであることを確認してください。
diff
または単純な減算を使用する代わりにim1-im2
、OpenCVメソッドをお勧めしますcv::absdiff
using namespace cv;
Mat im1 = imread("image1.jpg");
Mat im2 = imread("image2.jpg");
Mat diff;
absdiff(im1, im2, diff);
画像は通常、署名されていない形式を使用して保存されるため、@Dat と @ssh99 の減算メソッドはすべての負の差異を削除します。たとえば、BMP 画像の一部のピクセルに と の値がある場合[20, 50, 30]
、im1
との両方を使用すると、、およびすべての負の結果が の符号なし値 に変換される[70, 80, 90]
ため、と のim2
両方im1 - im2
を使用するとdiff(im1, im2, diff)
値 が生成されます。これは、ほとんどの場合、目的の値ではありません。メソッドは、代わりにすべての減算の絶対値を計算するため、より合理的な が生成されます。[0,0,0]
20-70 = -50
50-80 = -30
30-90 = -60
0
absdiff
[50,30,60]
cv::subtract() メソッドを使用します。
Mat img1=some_img;
Mat img2=some_img;
Mat dest;
cv::subtract(img1,img2,dest);
これは (img1-img2) の要素ごとの減算を実行します。それについての詳細を見つけることができますhttp://docs.opencv.org/modules/core/doc/operations_on_arrays.html