вычитание одного изображения из другого с помощью OpenCV
Как я могу вычесть одно изображение из другого с помощью openCV?
Ps.: Я не могу использовать реализацию python, потому что мне придется делать это на C++
4 ответов
использовать LoadImage
чтобы загрузить изображения в память, используйте Sub метод.
эта ссылка содержит пример кода, если это поможет:http://permalink.gmane.org/gmane.comp.lib.opencv/36167
#include <cv.h>
#include <highgui.h>
using namespace cv;
Mat im = imread("cameraman.tif");
Mat im2 = imread("lena.tif");
Mat diff_im = im - im2;
измените имена изображений. Также убедитесь, что они одинакового размера.
используйте метод 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
вместо 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]
.