初学opencv

来源:互联网 发布:mac版的千牛可以多开吗 编辑:程序博客网 时间:2024/04/30 13:56
CvRect box;void cv_mouse_callback(int  event,int x,int y,int flags,void*param);bool  drawing_box=false;//当点击左键时设置为true,表示要进行画方框void draw_box(IplImage*image,CvRect rect){cvRectangle(image,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),cvScalar(0xff,0x00,0x00));}int main(int argc,char** argv){box=cvRect(-1,-1,0,0);IplImage*image=cvCreateImage(cvSize(300,300),IPL_DEPTH_8U,3);cvZero(image);//新建图像并进行初始化IplImage*temp=cvCloneImage(image);//相当于创建和image大小一样的图像cvNamedWindow("Box Window");cvSetMouseCallback("Box Window",cv_mouse_callback,image);//注册鼠标事件while(1){//循环的意思是可以进行多次画方框cvCopyImage(image,temp);if(drawing_box)draw_box(temp,box);//当按下鼠标左键时,标识drawing_box为true,可以在图像temp上画矩形cvShowImage("Box Window",temp);if(cvWaitKey(15)==27)break;}}void  cv_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.height<0&&box.width<0){box.x+=box.width;box.y+=box.height;box.height*=-1;box.width*=-1;}else if(box.height<0){box.y+=box.height;box.height*=-1;}else if(box.width<0){box.x+=box.width;box.width*=-1;}draw_box(image,box);}break;}}

0 0