学习OpenCV(二)

来源:互联网 发布:mac 桌面上 ds.store 编辑:程序博客网 时间:2024/05/29 18:00

用鼠标在窗口中画正方形:

#include <cv.h>#include <highgui.h>void my_mouse_callback(int event, int x, int y, int flags, void *param);CvRect box;bool drawing_box = false;void draw_box(IplImage *img, CvRect rect){    cvRectangle(img, cvPoint(box.x, box.y), cvPoint(box.x + box.width, box.y + box.height),cvScalar(0xff, 0x00, 0x00));}int main(){    box = cvRect(-1, -1, 0, 0);    IplImage *image = cvCreateImage(cvSize(200, 200), IPL_DEPTH_8U, 3);    cvZero(image);    IplImage *temp = cvCloneImage(image);    cvNamedWindow("111",0);    cvSetMouseCallback("111", my_mouse_callback, (void*)image);    while (1){        cvCopyImage(image, temp);        if (drawing_box) draw_box(temp, box);        cvShowImage("111", temp);        if (cvWaitKey(15) == 27) break;    }    cvReleaseImage(&image);    cvReleaseImage(&temp);    cvDestroyWindow("111");    return 0;}void my_mouse_callback(int event, int x, int y, int flags, void *param){    IplImage *image = (IplImage*)param;    switch (event){    case CV_EVENT_MOUSEMOVE:{                                if (drawing_box){                                    box.width = x - box.x;                                    box.height = y - box.y;                                }    }        break;    case CV_EVENT_LBUTTONDOWN:{                                  drawing_box = true;                                  box = cvRect(x, y, 0, 0);    }        break;    case CV_EVENT_LBUTTONUP:{                                drawing_box = false;                                if (box.width < 0){                                    box.x += box.width;                                    box.width *= -1;                                }                                if (box.height < 0){                                    box.y += box.height;                                    box.height *= -1;                                }                                draw_box(image, box);    }        break;    }}
0 0