OpenCV

Signaler
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
12 août 2009
-
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
12 août 2009
-
Bonjour à tous,

Ma question est comment lire une partie d'une image de type IplImage de OpenCV.
Par exemple, j'ai une image source de 400*500 pixels et je vais former une nouvelle image de taille 100*100 tels que cette image prend les 100 premières lignes et colonnes de l'image source.
Est ce que vous avez une réponse?
Merci, c'est très urgent!!

Bonne journée.

amel

2 réponses

Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
12 août 2009

J'ai testé ce code:
   IplImage *img1 = cvLoadImage("test/aa.jpg",1);
   IplImage *bloc = cvCreateImage(cvGetSize(img1),img1->depth,img1->nChannels);
   cvSetImageROI(img1, cvRect(10, 15, 150, 250));
   cvCopy(img1, bloc,NULL);
Mais ça pas marché à l'éxécution une erreur se produit "size of input arguments do not match() in function cvCopy, car la fonction cvCopy utilise comme paramètre 8-bit single channel array mais pour mon cas j'utilise des images RGB (3 channels).
Est ce vous avez une autre proposition?
amel
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
12 août 2009

Voila la solution pour ceux qui sont intéressés(avec i et j vous pouvez les placer où vous voulez dans l'iamge originale img1 et bloc c'est un bloc de cette image)

for (int i=0; i<h; i++)
{
    for (int j=0; j<w; j++)
    {
        ((uchar *)(bloc->imageData + i*bloc->widthStep))[j*bloc->nChannels + 0]=((uchar *)(img1->imageData + i*img1->widthStep))[j*img1->nChannels + 0];
        ((uchar *)(bloc->imageData + i*bloc->widthStep))[j*bloc->nChannels + 1]=((uchar *)(img1->imageData + i*img1->widthStep))[j*img1->nChannels + 1];
        ((uchar *)(bloc->imageData + i*bloc->widthStep))[j*bloc->nChannels + 2]=((uchar *)(img1->imageData + i*img1->widthStep))[j*img1->nChannels + 2];
    }
}

amel