вычесть одно изображение из другого с помощью openCV - PullRequest
9 голосов
/ 23 марта 2010

Как вычесть одно изображение из другого, используя openCV?

Ps .: Я не могу использовать реализацию Python, потому что мне придется делать это в C ++

Ответы [ 4 ]

16 голосов
/ 31 марта 2010
#include <cv.h>
#include <highgui.h>

using namespace cv;

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

Mat diff_im = im - im2;

Изменить имена изображений. Также убедитесь, что они имеют одинаковый размер.

4 голосов
/ 20 февраля 2018

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

4 голосов
/ 23 марта 2010

Используйте LoadImage для загрузки изображений в память, затем используйте метод Sub .

Эта ссылка содержит пример кода, если это поможет: http://permalink.gmane.org/gmane.comp.lib.opencv/36167

3 голосов
/ 11 июня 2015

используйте метод 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

...