Bonjour

J'ai fait un programme qui permet de sélectionner une zone rectangulaire par la souris. Et j'ai trouvé une application qui permet de détecter les cercle dans une image mais le problème je sais pas rassembler les deux pour à la fin appliquer le transformée de hough seulement sur la zone sélectionner.

voila les deux codes:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 
#include <cv.h>
#include <highgui.h>
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<cxcore.h>
#include<cvaux.h>
 
using namespace std;
     IplImage*img0;
     IplImage*img1;
     CvPoint  point;
     CvSeq*circles;
     CvMemStorage*storage = cvCreateMemStorage(0);
    int drag = 0;
 
 
void MOUSEMOVEPOINT(int event, int x, int y, int flags, void* param)
{
    /* user press left button */
    if (event == CV_EVENT_LBUTTONDOWN && !drag)
    {
        point = cvPoint(x,y);
        drag  = 1;
    }
 
    /* user drag the mouse */
    if (event == CV_EVENT_MOUSEMOVE && drag)
    {
        img1 = cvCloneImage(img0);
      // cvSmooth(img1,img1, CV_GAUSSIAN, 9, 9, 0, 0);
 
        cvRectangle(
            img1,
            point,
            cvPoint(x,y),
            CV_RGB(0, 0, 255)
        );
 
        cvShowImage("img", img1);
    }
 
    /* user release left button */
    if (event == CV_EVENT_LBUTTONUP && drag)
    {
        img1 = cvCloneImage(img0);
 
 
        cvSetImageROI(
            img1,
            cvRect(
                point.x,
                point.y,
                x - point.x,
                y - point.y
            )
        );
 
        cvNot(img1,img1);    // or do whatever with the ROI
        cvResetImageROI(img1);
        cvShowImage("img",img1);
        drag = 0;
    }
 
    /* user click right button: reset all */
    if (event == CV_EVENT_RBUTTONUP)
    {
        cvShowImage("img",img0);
        drag = 0;
 
    }
}
 
int main()
{
 
   // charger une image
   img0=cvLoadImage("img.jpg");
   if (img0 == NULL)
    {
        cout << "impossible d'ouvrir le fichier";
        exit(EXIT_FAILURE);
    }
 
    //On vérifie l'origine de l'image chargée
    //Si elle n'est pas en haut à gauche, il faut la corriger
    int flip=0;
    if(img0->origin!=IPL_ORIGIN_TL)
    {
        flip=CV_CVTIMG_FLIP;
    }
 
    //Création des fenêtres dans lesquelles nous afficherons les images
    cvNamedWindow("img", 1);
    cvSetMouseCallback("img", MOUSEMOVEPOINT,NULL);
    cvShowImage("img", img0);
    cvWaitKey(0);
    cvDestroyWindow("img");
    cvReleaseImage(&img0);
    cvReleaseImage(&img1);
 
    //cvReleaseImage(&image_cercle);
 
   return 0;
 
}

voila le trasformée de hough

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
circles = cvHoughCircles(image_gris, storage, CV_HOUGH_GRADIENT,1,image_gris->height/12);
   for(int i = 0; i < circles->total; i++ )
 {
   float* p = (float*)cvGetSeqElem( circles, i );
   cvCircle( image_couleur, cvPoint(cvRound(p[0]),cvRound(p[1])),2, CV_RGB(0,255,0), -1, 8, 0 );
   cvCircle( image_couleur, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(0,0,255), 1, 8, 0 );
}
Merci