代码之家  ›  专栏  ›  技术社区  ›  marionmaiden

使用opencv从另一个图像中减去一个图像

  •  8
  • marionmaiden  · 技术社区  · 15 年前

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

    Ps.:我不使用Python实现,因为我必须在C++中完成它。

    4 回复  |  直到 7 年前
        1
  •  4
  •   Justin Ethier    15 年前

    使用 LoadImage 要将图像加载到内存中,请使用 Sub 方法。

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

        2
  •  16
  •   Dat Chu    15 年前
    #include <cv.h>
    #include <highgui.h>
    
    using namespace cv;
    
    Mat im = imread("cameraman.tif");
    Mat im2 = imread("lena.tif");
    
    Mat diff_im = im - im2;
    

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

        3
  •  3
  •   ssh99    10 年前

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

        4
  •  3
  •   John Smith    7 年前

    而不是使用 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] 对于 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] .