2010-03-23 29 views

Respuesta

5

Uso LoadImage para cargar sus imágenes en la memoria, a continuación, utilizar el método Sub.

Este enlace contiene un código de ejemplo, si eso ayuda: http://permalink.gmane.org/gmane.comp.lib.opencv/36167

+0

Lo intentaré, mi amigo. Gracias – marionmaiden

+0

Esta respuesta nació obsoleta :) [Respuesta de DatChu] (http://stackoverflow.com/a/2549246/2436175) es la única válida hoy en día. – Antonio

+1

El primer enlace expira, el segundo enlace está muerto. – Twonky

13
#include <cv.h> 
#include <highgui.h> 

using namespace cv; 

Mat im = imread("cameraman.tif"); 
Mat im2 = imread("lena.tif"); 

Mat diff_im = im - im2; 

Cambiar los nombres de las imágenes. También asegúrate de que tengan el mismo tamaño.

0

En lugar de utilizar diff o simplemente la resta llanura im1-im2 Yo sugeriría más bien el método OpenCV cv::absdiff

using namespace cv; 
Mat im1 = imread("image1.jpg"); 
Mat im2 = imread("image2.jpg"); 
Mat diff; 
absdiff(im1, im2, diff); 

Dado que las imágenes se almacenan generalmente utilizando formatos sin firmar, los métodos de sustracción de @Dat y @ ssh99 matarán todas las diferencias negativas. Por ejemplo, si algunos píxel de una imagen BMP de tiene valor [20, 50, 30] para im1 y [70, 80, 90] para im2, utilizando tanto im1 - im2 y diff(im1, im2, diff) producirá valor [0,0,0], ya 20-70 = -50, 50-80 = -30, 30-90 = -60 y todos los resultados negativos se convertirá en valor sin signo de 0, que , en la mayoría de los casos, no es lo que quieres. El método absdiff en su lugar calculará los valores absolutos de todas las restas, produciendo de esta forma un [50,30,60] más razonable.

Cuestiones relacionadas