#include // Pour std::cout et std::cin #include #include IplImage *img; IplImage *imgnvg; IplImage *imgmed; int r=255, g=255, b=255; // Par défaut, RGB = (255, 255, 255), soit blanc. int ord1, abs1,abs2, ord2,ord3; bool can_write = false; void refresh() { cvShowImage("mon image2", imgnvg); } void setR(int new_value) { r = new_value; } void setG(int new_value) { g = new_value; } void setB(int new_value) { b = new_value; } void mouseEvents(int event, int x, int y, int flags, void* param) { switch(event) { case CV_EVENT_LBUTTONDOWN: can_write = true; ord1=y; abs1=x; break; case CV_EVENT_LBUTTONUP: can_write = false; abs2=x; break; case CV_EVENT_RBUTTONDOWN: can_write = true; case CV_EVENT_RBUTTONUP: can_write = false; ord3=y; break; case CV_EVENT_MOUSEMOVE: if(can_write) cvCircle(imgnvg, cvPoint(x, y), 1, cvScalar(b, g, r)); break; } refresh(); } int main() { img = cvLoadImage("/home/sami/Images/lena.jpeg", CV_LOAD_IMAGE_COLOR); IplImage *imgnvg = cvCreateImage(cvGetSize(img), img->depth, 1); cvConvertImage(img, imgnvg); IplImage *imgmed= cvCloneImage(imgnvg); cvNamedWindow("mon image", CV_WINDOW_AUTOSIZE); cvNamedWindow("mon image2", CV_WINDOW_AUTOSIZE); cvNamedWindow("mon image3", CV_WINDOW_AUTOSIZE); cvCreateTrackbar("red", "mon image2", &r, 255, setR); cvCreateTrackbar("bleu", "mon image2", &b, 255, setR); cvCreateTrackbar("green", "mon image2", &g, 255, setR); cvSetMouseCallback("mon image2", mouseEvents); cvShowImage("mon image", img); cvShowImage("mon image2", imgnvg); cvShowImage("mon image3", imgmed); CvRect rect = cvRect(ord1, abs1, abs2-abs1, ord3-ord2); cvSetImageROI(imgnvg, rect); cvSmooth(imgnvg, imgmed, CV_MEDIAN, 5); cvWaitKey(0); cvDestroyAllWindows(); cvReleaseImage(&img); cvReleaseImage(&imgnvg); cvReleaseImage(&imgmed); return 0; }