opencv draw box

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
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));
}
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;
    }
}

int main(int argc,char** argv)
{
    box=cvRect(-1,-1,0,0);
    IplImage* image=cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);
    cvZero(image);//set black
    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");

}

感觉不会很难得理解,但是可以学习很多基本的语句

posted @ 2012-06-04 20:08  Epirus  阅读(1620)  评论(0编辑  收藏  举报