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
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
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;
}
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager