mar*_*den 10 c++ opencv image subtraction
如何使用openCV从另一个图像中减去一个图像?
Ps.:我不会使用python实现,因为我必须在C++中完成它
Dat*_*Chu 16
#include <cv.h>
#include <highgui.h>
using namespace cv;
Mat im = imread("cameraman.tif");
Mat im2 = imread("lena.tif");
Mat diff_im = im - im2;
Run Code Online (Sandbox Code Playgroud)
更改图像名称.还要确保它们具有相同的尺寸.
Joh*_*ith 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);
Run Code Online (Sandbox Code Playgroud)
由于图像通常使用无符号格式存储,@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);
Run Code Online (Sandbox Code Playgroud)
这将执行 (img1-img2) 的逐元素减法。您可以找到有关它的更多详细信息http://docs.opencv.org/modules/core/doc/operations_on_arrays.html
用于LoadImage将图像加载到内存中,然后使用Sub方法.
此链接包含一些示例代码,如果这将有所帮助:http://permalink.gmane.org/gmane.comp.lib.opencv/36167