Si par changement vous dire remplacer, alors vous pouvez utiliser le ROI image (région d'intérêt) fonctions à directement remplacer une zone rectangulaire de votre image d'origine avec une région rectangulaire d'une autre image très efficacement. Supposons que votre image d'origine a été stockée dans A
et que vous souhaitiez en changer une partie (une zone rectangulaire) en utilisant les pixels d'une image B
.
MISE À JOUR: Voici le code en C
/**** C ****/
// Acquire Image A and B (here as an example, I'm reading from disk)
IplImage* A = cvLoadImage("image_A.jpg");
IplImage* B = cvLoadImage("image_B.jpg");
// Set the region-of-interest (ROI) for the two images
// such that only the ROI of A and B will be handled
cvSetImageROI(A,cvRect(200,200,128,128));
cvSetImageROI(B,cvRect(0,0,128,128));
// Copy the ROI in B to the ROI in A
cvCopy(B,A);
// Reset the ROI (now the entire image will be handled)
cvResetImageROI(A);
cvResetImageROI(B);
// Display A
cvNamedWindow("Modified A");
cvShowImage("Modified A",A);
cvWaitKey();
// Release the images
cvReleaseImage(&A);
cvReleaseImage(&B);
En utilisant OpenCV 2.0:
// C++ //
// Images A and B have already been loaded .....
// Region in image A starting from (100,100) of width 200 and height 200
Rect RegionA(100,100,200,200);
// Region in image B starting from (50,50) of width 200 and height 200
Rect RegionB(50,50,200,200);
// No copying, just a reference to the ROI of the image
Mat A_ROI(A,RegionA);
Mar B_ROI(B,RegionB);
// Copy all the pixels in RegionB in B to RegionA to A
B.copyTo(A);
hmmm merci mais pouvez-vous écrire un code C je ne suis pas bon à C++ j'ai appris que la copie de cvSetImageROI qui a spécifié rectangulaire à une autre image j'ai entendu la fonction de ROI elle-même la première fois. comme je l'ai sous-entendu vos commentaires près du il fera juste ce que je cherche – eomer
Ok, le code C est en hausse – Jacob
merci jacob fonctionne parfait – eomer