使用OpenCV从另一张图像中减去一张图像

12

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

附注:我无法使用Python实现,因为我必须使用C++。

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;

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


12

与其使用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图像的某个像素在im1中具有值[20,50,30],在im2中具有值[70,80,90],则使用im1-im2diff(im1,im2,diff)都会产生值[0,0,0],因为20-70=-5050-80=-3030-90=-60,并且所有负结果将转换为无符号值 0 ,这在大多数情况下不是您想要的。相反,方法absdiff将计算所有减法的绝对值,从而产生更合理的[50,30,60]


6

3

1
这个答案已经过时了 :) DatChu的回答 是现在唯一有效的。 - Antonio
2
第一个链接超时了,第二个链接已经失效。 - Twonky
是的...链接答案。唉。 - Gavin Simpson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接