11

openCVを使用して、ある画像から別の画像を差し引くにはどうすればよいですか?

Ps .: C++ で実行する必要があるため、Python の実装は使用できません。

4

4 に答える 4

19
#include <cv.h>
#include <highgui.h>

using namespace cv;

Mat im = imread("cameraman.tif");
Mat im2 = imread("lena.tif");

Mat diff_im = im - im2;

イメージ名を変更します。また、それらが同じサイズであることを確認してください。

于 2010-03-30T22:46:30.163 に答える
10

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 = -5050-80 = -3030-90 = -600absdiff[50,30,60]

于 2018-02-20T11:18:02.193 に答える
6

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

于 2015-06-11T20:05:49.207 に答える
3

を使用LoadImageして画像をメモリに読み込み、Subメソッドを使用します。

このリンクにはサンプル コードが含まれています

于 2010-03-23T17:41:28.573 に答える