opencv用鼠标在窗口中画方形的程序

来源:互联网 发布:kafka java 编辑:程序博客网 时间:2024/05/17 04:10
#include <iostream>#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("Box Example");    cvSetMouseCallback("Box Example", my_mouse_callback, (void*)image);    while(1)    {        cvCopyImage(image, temp);        if(drawing_box)            draw_box(temp, box);        cvShowImage("Box Example",  temp);        if(cvWaitKey(15)==27) break;    }    cvReleaseImage(&image);    cvReleaseImage(&temp);    cvDestroyWindow("Box Example");}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;    }}

原创粉丝点击