2010-03-23 21 views

Répondre

5

Utilisez LoadImage pour charger vos images dans la mémoire, puis utilisez la méthode Sub.

Ce lien contient quelques exemples de code, si cela peut aider: http://permalink.gmane.org/gmane.comp.lib.opencv/36167

+0

Je vais essayer, mon ami. Merci – marionmaiden

+0

Cette réponse est née obsolète :) [DatChu réponse] (http://stackoverflow.com/a/2549246/2436175) est la seule valable de nos jours. – Antonio

+1

Le premier lien expire, le deuxième lien est mort. – 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; 

Modifiez les noms d'image. Assurez-vous également qu'ils ont la même taille.

0

Au lieu d'utiliser diff ou tout simplement une soustraction simple im1-im2 je suggère plutôt la méthode OpenCV cv::absdiff

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

Comme les images sont généralement stockées en utilisant des formats non signés, les méthodes de soustraction de @Dat et @ ssh99 vont tuer toutes les différences négatives. Par exemple, si un pixel d'une image BMP a une valeur [20, 50, 30] pour im1 et [70, 80, 90] pour im2, utilisant à la fois im1 - im2 et diff(im1, im2, diff) produira valeur [0,0,0], depuis 20-70 = -50, 50-80 = -30, 30-90 = -60 et tous les résultats négatifs seront convertis en valeur non signée de 0, qui , dans la plupart des cas, n'est pas ce que vous voulez. La méthode absdiff calcule à la place les valeurs absolues de toutes les soustractions, produisant ainsi des valeurs plus raisonnables [50,30,60].