如何使用openCV从另一个图像中减去一个图像?
Ps。:我不会使用python实现,因为我必须在C ++中这样做
答案 0 :(得分: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;
更改图像名称。还要确保它们具有相同的尺寸。
答案 1 :(得分:4)
使用LoadImage
将图片加载到内存中,然后使用Sub方法。
此链接包含一些示例代码,如果有帮助:http://permalink.gmane.org/gmane.comp.lib.opencv/36167
答案 2 :(得分:4)
我宁愿建议使用OpenCV方法diff
im1-im2
或仅使用简单减法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]
。
答案 3 :(得分:3)
使用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