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 :

Points d'intérêt de Harris


Sujet :

OpenCV

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 34
    Points
    34
    Par défaut Points d'intérêt de Harris
    bonjour tout le monde

    je voudrais avoir un moyens pour detecter des points d'interet de deux images stereo

    j'ai eseyer avec cvcornerharris( ) mais sa veux pas marcher en plus j'ai pas su extraire les points

    merci de votre aide

    c simpa

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 12
    Points
    12
    Par défaut la solution se trouve dans une boucle de cvMinMaxLoc
    Salut
    j ai deja eu ce probleme
    en faite les points d interret sont les points dans l'intensité est non nulle dans l image d'output (noire sauf dans ces points)


    voila un copier coller de mon premier code qui detecte les corners


    Détection des corners avec la méthode de Harris :
    Pour cette première étape on a commencé par 2 fichiers : un fichier header «functions.h» où on a
    définit les fonctions à utiliser et un fichier où se trouve le programme principal «mainprogram.cpp».
    Code du fichier « functions.h »

    #include <cv.h>
    #include <highgui.h>
    #include <iostream>
    /*
    January 2008
    Annuler_0*/
    int LoadImageFile(char *imageName,IplImage **im);
    void GetImageCorners(const IplImage *im,IplImage **corners,IplImage
    **gray);
    void LocateCornersInArray(IplImage* corners,CvPoint
    CornerPoint[],int* CornersNbr,int CornersMinDistance=20);
    void HoldImages(void);
    void CleanAndDestroy(char* NameWindow,IplImage* image);
    void MarkCorners(CvPoint CornerPoints[], IplImage** original,int
    NbrCorners);
    int LoadImageFile(char* imageName,IplImage** im){
    //Load the image and make sure that it loads correctly
    *im = cvLoadImage(imageName, -1);
    if( *im == 0 ) {
    //Drop out if the image isn't found
    std::cerr << "Failed to load: " << imageName << std::endl;
    return 1;
    }
    return 0;
    }
    void GetImageCorners(const IplImage* im,IplImage** corners,IplImage**
    gray){
    //Necessary conversions before using harris corner detection
    *gray = cvCreateImage( cvSize(im->width,im->height), 8,1);;
    cvCvtColor( im, *gray, CV_BGR2GRAY );
    *corners = cvCreateImage( cvSize(im->width,im->height), 32,1);
    //Detecting corners with harris
    cvCornerHarris( *gray, *corners, 3, 3, 0.04);
    }
    void LocateCornersInArray(IplImage* corners,CvPoint CornerPoint[],int*
    CornersNbr,int CornersMinDistance){
    //now we need to localize corners and write it to the screen
    double minVal, maxVal;
    CvPoint minLoc, maxLoc;
    int i,j,x,y,k;
    i=0;
    x=0;
    CvRect cornersOI;
    k=0;
    while (x< corners->width)
    {
    y=0;
    j=0;
    while (y< corners->height)
    {
    cornersOI = cvRect(x,y,CornersMinDistance,CornersMinDistance);
    cvSetImageROI(corners,cornersOI);
    cvMinMaxLoc(corners, &minVal, &maxVal, &minLoc, &maxLoc, 0);
    // if (maxVal>0) printf("\n maximum value = %f\tposition =
    (%i,%i)", maxVal,
    maxLoc.x+CornersMinDistance*i,maxLoc.y+CornersMinDistance*j);
    if (maxVal>0) { CornerPoint[k].x=
    maxLoc.x+CornersMinDistance*i;
    CornerPoint[k].y=maxLoc.y+CornersMinDistance*j;
    k++;
    }//put CornerPoints on an array of k values
    y=y+CornersMinDistance;
    j=j+1;
    }
    x=x+CornersMinDistance;
    i=i+1;
    };
    *CornersNbr=k;
    }
    //display where are corners in original image
    void MarkCorners(CvPoint CornerPoints[], IplImage** original,int
    NbrCorners){
    int i=0;
    while (i<=NbrCorners){
    cvCircle(*original,CornerPoints[i],4,CV_RGB(255,0,0),1,8,0);
    i++;
    }
    }
    void DisplayImage(char* NameWindow,IplImage* image)
    {
    cvNamedWindow(NameWindow, 0);
    cvShowImage(NameWindow, image );
    cvResizeWindow(NameWindow,500,500*(image->height)/(image->width));
    }
    void HoldImages(void){
    //hold the images until a key is pressed
    cvWaitKey(0);
    }
    void CleanAndDestroy(char* NameWindow,IplImage* image){
    cvReleaseImage(&image);
    cvDestroyWindow(NameWindow);
    }
    Code du fichier « mainprogram.cpp »
    #include <cv.h>
    #include <highgui.h>
    #include <iostream>
    #include "functions.h"
    //January 2008
    //Annuler_0 ( a) yahoo.fr
    int main( void ) {
    IplImage* im1;
    IplImage* gray1;
    IplImage* corners1;
    int CornerNbr;
    CvPoint CornerPoints1[500];
    if (LoadImageFile("testfile.bmp",&im1)==1) return 1; //chargement de
    l'image ; Image Loading
    //if error quit else continue !
    GetImageCorners(im1,&corners1,&gray1); //Detect corners with Harris
    LocateCornersInArray(corners1,CornerPoints1,&CornerNbr);
    DisplayImage("Before Marking corners",im1);
    //display original
    MarkCorners(CornerPoints1,&im1,CornerNbr);
    DisplayImage("After Marking corners",im1);
    //display original
    HoldImages();
    CleanAndDestroy("Before Marking corners",im1);
    cvDestroyAllWindows();
    return 0;
    }

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    merci bcp pr votre repense

    enfait ce ue je voudrai savoir c'est a quoi sert la variable "cornermindistance" qui est un argument ds une fonction

    merci

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par faroukus Voir le message
    merci bcp pr votre repense

    enfait ce ue je voudrai savoir c'est a quoi sert la variable "cornermindistance" qui est un argument ds une fonction

    merci
    c'est simplement la distance entre 2 (en pixels) entre 2 points d'interret voisin

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 47
    Points : 23
    Points
    23
    Par défaut hello
    je viens d éssayer ce code mais il ne veut pas marcher!en fait moi g écrit un petit code mais il m envoi un bug...et ché pa pk!!!voila le code:
    #include <cv.h>
    #include <cvaux.h>
    #include <highgui.h>

    void main()
    {

    int block_size=3;
    int aperture_size=3;
    double k=0.04;
    double *minVal, *maxVal;
    *minVal=0.0;*maxVal=0.0;
    CvPoint *minLoc, *maxLoc;
    CvRect cornersOI;
    IplImage*img;
    img=cvLoadImage("im2-1.bmp",1);

    IplImage*gray=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,1);

    cvCvtColor( img,gray,CV_BGR2GRAY );

    IplImage* harris_responce=cvCreateImage(cvSize(gray->width,gray->height),IPL_DEPTH_32F,1);

    cvCornerHarris(gray,harris_responce, block_size, aperture_size, k );

    cornersOI =cvRect(10,10,20,20);

    cvSetImageROI(harris_responce,cornersOI);

    cvMinMaxLoc(harris_responce, minVal, maxVal, minLoc, maxLoc, 0);


    }

    donc si qlq 1 peut m aider ça sera tro sympa...merci d avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Invariants différentiels pour caractériser les points d'intérêt
    Par mobi_bil dans le forum Traitement d'images
    Réponses: 69
    Dernier message: 29/07/2009, 20h30
  2. Réponses: 1
    Dernier message: 09/07/2009, 12h36
  3. Réponses: 1
    Dernier message: 06/03/2009, 20h08
  4. Réponses: 1
    Dernier message: 05/08/2008, 15h47
  5. Tour de France en 116 000 points d'intérêts
    Par philben dans le forum Contribuez
    Réponses: 0
    Dernier message: 15/06/2008, 19h38

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