Вместо использования 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]
.