Comment puis-je soustraire une image d'une autre à l'aide d'openCV?soustraire une image d'une autre à l'aide d'openCV
Ps .: Je coudn't utiliser l'implémentation Python parce que je vais devoir le faire en C++
Comment puis-je soustraire une image d'une autre à l'aide d'openCV?soustraire une image d'une autre à l'aide d'openCV
Ps .: Je coudn't utiliser l'implémentation Python parce que je vais devoir le faire en C++
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
#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.
utilisez la méthode cv :: subtract().
Mat img1=some_img;
Mat img2=some_img;
Mat dest;
cv::subtract(img1,img2,dest);
Ceci réalise un soustraction élémentaire de (img1-img2). vous pouvez trouver plus de détails à ce sujet http://docs.opencv.org/modules/core/doc/operations_on_arrays.html
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]
.
Je vais essayer, mon ami. Merci – marionmaiden
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
Le premier lien expire, le deuxième lien est mort. – Twonky