//例4-1 用鼠标在窗口中画矩形 #include "stdafx.h" #include <cv.h> #include <highgui.h> #include <stdlib.h> void my_mouse_callback(int event,int x,int y,int flag,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(int argc, CHAR** argv) { box=cvRect(-1,-1,0,0); IplImage* imge=cvCreateImage(cvSize(1200,700),IPL_DEPTH_8U,3); cvZero(imge); IplImage* temp=cvCloneImage(imge); cvNamedWindow("box example"); cvSetMouseCallback("box example",my_mouse_callback,(void*)imge); while (1) { cvCopyImage(imge,temp); if (drawing_box) { draw_box(temp,box); } cvShowImage("box example",temp); if (cvWaitKey(15)==27) { break; } } cvReleaseImage(&imge); cvReleaseImage(&temp); cvDestroyWindow("box example"); //char jieshu; //scanf(&jieshu); return 0; } void my_mouse_callback(int event,int x,int y,int flag,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; } } //例4-2 使用滑动条实现开关 #include "stdafx.h" #include <cv.h> #include <highgui.h> int g_switch_value=0; void switch_callback(int position) { if (position==0) { switch_off_function(); } else { switch_on_function(); } } int _tmain(int argc, _TCHAR* argv[]) { cvNamedWindow("Demo Window",1); cvCreateTrackbar("switch","Demo Window",&g_switch_value,1,switch_callback()); while(1) { if (cvWaitKey(15)==27) { break; } } return 0; } 笔记: 分析一下