OpenCV

amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009 - 17 avril 2009 à 12:38
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009 - 17 avril 2009 à 15:19
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

amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
17 avril 2009 à 13:36
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
0
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
17 avril 2009 à 15:19
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
0
Rejoignez-nous