вычесть одно изображение из другого с помощью openCV

StackOverflow https://stackoverflow.com/questions/2501957

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top