如何使用openCV从另一张图像中减去一张图像?
附注:我无法使用Python实现,因为我必须使用C++。
如何使用openCV从另一张图像中减去一张图像?
附注:我无法使用Python实现,因为我必须使用C++。
#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图像的某个像素在im1中具有值[20,50,30]
,在im2中具有值[70,80,90]
,则使用im1-im2
和diff(im1,im2,diff)
都会产生值[0,0,0]
,因为20-70=-50
,50-80=-30
,30-90=-60
,并且所有负结果将转换为无符号值 0
,这在大多数情况下不是您想要的。相反,方法absdiff
将计算所有减法的绝对值,从而产生更合理的[50,30,60]
。
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
LoadImage
将您的图像加载到内存中,然后使用Sub方法。这里有一些示例代码供参考:http://permalink.gmane.org/gmane.comp.lib.opencv/36167。