вычесть одно изображение из другого с помощью openCV
-
21-09-2019 - |
Вопрос
Как я могу вычесть одно изображение из другого с помощью openCV?
Пс.:Я не могу использовать реализацию Python, потому что мне придется делать это на C++.
Решение
Использовать LoadImage
чтобы загрузить изображения в память, затем используйте Саб метод.
Эта ссылка содержит пример кода, если это поможет: 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;
Измените названия изображений.Также убедитесь, что они имеют одинаковый размер.
Вместо использования 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