11

如何使用 openCV 从另一个图像中减去一个图像?

Ps.:我不能使用 python 实现,因为我必须用 C++ 来做

4

4 回答 4

19
#include <cv.h>
#include <highgui.h>

using namespace cv;

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

Mat diff_im = im - im2;

更改图像名称。还要确保它们具有相同的尺寸。

于 2010-03-30T22:46:30.163 回答
10

而不是使用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]forim1[70, 80, 90]for 的值,则im2使用两者都会产生 value ,因为,和所有负数结果都将转换为 的无符号值,在大多数情况下,这不是您想要的。方法将改为计算所有减法的绝对值,从而产生更合理的 .im1 - im2diff(im1, im2, diff)[0,0,0]20-70 = -5050-80 = -3030-90 = -600absdiff[50,30,60]

于 2018-02-20T11:18:02.193 回答
6

使用 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

于 2015-06-11T20:05:49.207 回答
3

用于LoadImage将图像加载到内存中,然后使用Sub方法。

此链接包含一些示例代码,如果有帮助的话:http: //permalink.gmane.org/gmane.comp.lib.opencv/36167

于 2010-03-23T17:41:28.573 回答