J'utilise open source et je veux créer une image à partir d'une partie d'une autre image.
Je n’ai pas trouvé de fonction qui fasse cela, alors j’essaie de mettre en œuvre mon idée qui consiste à copier l’image pixel par pixel, mais j’ai vainement obtenu le résultat attendu.
Tout le monde a une autre idée
Code:
#include "cv.h"
#include "highgui.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main(int argc,char** argv) {
IplImage * img =0;
uchar *data;
int i,j,k;
int height,width,widthStep,nChannels;
img=cvLoadImage(argv[1],3);
height =img->height;
width = img->width;
widthStep= img->widthStep;
nChannels = img->nChannels;
data=(uchar*)img->imageData;
IplImage* img1=cvCreateImage(cvSize(height/2,width/2),IPL_DEPTH_8U,nChannels);
for(i=0;i<height/2;i++){
for(j=0;j<width/2;j++){
for(k=0;k<3;k++){
img1->imageData[i*widthStep+j*nChannels]=data[i*widthStep+j*nChannels];
}
}
}
cvShowImage("image_Originale2",img1);
cvWaitKey(0);
cvReleaseImage(&img);
return 0;
}
Ce que vous essayez d'accomplir peut être accompli en définissant uneROI(région d'intérêt) sur cette image et en copiant la partie définie par le retour sur investissement dans une nouvelle image.
Vous pouvez voir un démo utilisant IplImage
sur ce message }.
Ces publications montrent les utilisations du retour sur investissement pour résoudre différents scénarios:
Il est important de noter que votre code utilise l'interface C de OpenCV. L'interface C++ offre cv::Mat
, qui est l'équivalent de IplImage
. En d'autres termes, vous recherchez une solution C au problème.
Vous devriez utiliser le constructeur de copie de cv::Mat
. C'est beaucoup mieux que IplImage
:
int x = 10,
y = 20,
width = 200,
height = 200;
Mat img1, img2;
img1 = imread("Lenna.png");
img2 = img1(Rect(x, y, width, height));
Utilisation du constructeur de copie:
cv::Mat whole = ...; // from imread or anything else
cv::Mat part(
whole,
cv::Range( 20, 220 ), // rows
cv::Range( 10, 210 ));// cols
Recherchez la fonction cvSetImageROI () .
Définit une région d’intérêt image (ROI) pour un rectangle donné.