IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Combiner des blocs pour avoir une image


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Points : 21
    Points
    21
    Par défaut Combiner des blocs pour avoir une image
    Salut,

    j'ai une image que je divise en blocs et j'applique à chaque blocs un traitement.
    alors comment combiner ses blocs pôur reconstituer l'image ?
    ou bien est ce qu'il ya une fonction en Opencv qui permet de copier un sous image dans une autre image dans un emplacement bien défini?

    Merci d'avance

  2. #2
    Membre régulier Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Points : 123
    Points
    123
    Par défaut
    Salut,

    Essaye avec les fonctions cvSetImageROI() et cvResetImageROI. Si je ne me trompe pas, tu dois pouvoir appliquer un traitement à chaque ROI ce qui t'évite de reconstruire l'image. Si ça ne marche pas, tu peux toujours utiliser ces deux fonctions pour recopier des parties d'images les unes dans les autres.

    Edit: utilise la fonction cvCopy pour recopier l'image, il me semble que cvCopyImage ne tient pas compte du ROI.

    A+

    Hunta

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 41
    Points : 21
    Points
    21
    Par défaut
    Salut,
    j'ai essayé avec cvCopyImage mais les 2 images doivent avoir le méme taille alors que moi je vais copier un petit bloc dans une image.
    en plus cvSetImageROI et cvResetImageROI te permet d'extraire un bloc d'image.
    j'ai trop cherché et enfin j'ai fait le copiage pixel par pixel de bloc vers l'image et ca marche.

    En tout cas Merci.

  4. #4
    Membre régulier Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Points : 123
    Points
    123
    Par défaut
    Salut,

    cvCopyImage ne tient pas compte du roi. Elle copie donc l'intégralité de l'image et il faut donc que tes deux images aient la même taille.
    Il faut utiliser cvCopy qui tient compte du roi et fixer son roi avec cvSetImageROI (+cvReleaseImageROI). J'ai déjà utiliser cette méthode pour de l'appariement d'images translatées.

    A+

    Hunta

  5. #5
    Membre régulier Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Points : 123
    Points
    123
    Par défaut
    Salut,

    Après recherche dans mes vieux codes d'essai, j'ai trouvé ça. En espérant que cela pourra aider quelqu'un.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    int main(void)
    {
     
    	IplImage* red = cvLoadImage("C:/temp/red.bmp",1); //image 128x128
    	IplImage* green = cvLoadImage("C:/temp/green.bmp",1);
    	IplImage* blue = cvLoadImage("C:/temp/blue.bmp",1);
     
    	IplImage* mosaic = cvCreateImage(cvSize(512,128),8,3);
    	int nWCases=8;
    	int nHCases=2;
     
    	CvSize mosaicSize=cvGetSize(mosaic);
     
    	int WCase=static_cast<int>(floor(static_cast<double>(mosaicSize.width/nWCases)));
    	int HCase=static_cast<int>(floor(static_cast<double>(mosaicSize.height/nHCases)));
     
    	std::cout<<"largeur : "<<WCase<<std::endl;
    	std::cout<<"hauteur : "<<HCase<<std::endl;
     
    	if (WCase>128) WCase=128;
    	if (HCase>128) HCase=128;
     
    	int color=0;
     
    	for (int i=0; i<nHCases; i++)
    	{
    		for (int j=0; j<nWCases; j++)
    		{
    			cvSetImageROI(mosaic,cvRect(j*WCase,i*HCase,WCase,HCase));
     
    			switch (color%3)
    			{
    			case 0:
    				{
    					cvSetImageROI(red,cvRect(0,0,WCase,HCase));
    					cvCopy(red,mosaic);
    					cvResetImageROI(red);
    				}break;
     
    			case 1:
    				{
    					cvSetImageROI(green,cvRect(0,0,WCase,HCase));
    					cvCopy(green,mosaic);
    					cvResetImageROI(green);
    				}break;
     
    			case 2:
    				{
    					cvSetImageROI(blue,cvRect(0,0,WCase,HCase));
    					cvCopy(blue,mosaic);
    					cvResetImageROI(blue);
    				}break;
    			}
     
    			cvResetImageROI(mosaic);
     
    			color++;
     
    		}
     
    	}
     
    	cvNamedWindow("mosaic",1);
    	cvShowImage("mosaic",mosaic);
     
    	cvWaitKey();
    }
    A+

    Hunta

Discussions similaires

  1. Relier des points pour avoir une grille
    Par Chefcou dans le forum Calcul scientifique
    Réponses: 6
    Dernier message: 22/06/2012, 08h46
  2. Réponses: 2
    Dernier message: 25/05/2011, 17h07
  3. cliquer avec souris pour avoir une image
    Par yaya125 dans le forum GTK+
    Réponses: 16
    Dernier message: 29/12/2010, 10h53
  4. Réponses: 5
    Dernier message: 15/08/2008, 16h08
  5. Des astuces pour avoir une idée claire de ce qu'on veut ?
    Par Neolander dans le forum Méthodes
    Réponses: 8
    Dernier message: 17/03/2008, 08h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo