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;
} |
Partager