GUI 指令
1、窗口管理
(1) 创建和定位一个新窗口:
cvNamedWindow("win1", CV_WINDOW_AUTOSIZE);
cvMoveWindow("win1", 100, 100); // offset from the UL corner of the screen
(2) 载入图像:
IplImage* img=0;
img=cvLoadImage(fileName, CV_LOAD_IMAGE_COLOR);
if(!img) printf("Could not load image file: %s\n",fileName);
(3) 显示图像:
cvShowImage("win1",img);
该函数可以在上面建立的窗口(win1)中显示彩色或灰度的字节型/浮点型图像。字节型图像像素值范围为[0-255];浮点型图像像素值范围为[0-1]。彩色图像的三色元素按BGR(蓝-绿-红)顺序存储。
(4) 关闭窗口:
(5) 改变窗口大小:
cvResizeWindow("win1",100,100); // new width/heigh in pixels
2、输入处理
(1) 处理鼠标事件:
定义一个鼠标处理程序:
void mouseHandler(int event, int x, int y, int flags, void* param)
{
switch(event){
case CV_EVENT_LBUTTONDOWN:
if(flags & CV_EVENT_FLAG_CTRLKEY)
printf("Left button down with CTRL pressed\n");
break;
case CV_EVENT_LBUTTONUP:
printf("Left button up\n");
break;
}
}
x,y: 相对于左上角的像素坐标
event: CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN,
CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP,
CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK,
CV_EVENT_MOUSEMOVE:
flags: CV_EVENT_FLAG_CTRLKEY, CV_EVENT_FLAG_SHIFTKEY, CV_EVENT_FLAG_ALTKEY,
CV_EVENT_FLAG_LBUTTON, CV_EVENT_FLAG_RBUTTON, CV_EVENT_FLAG_MBUTTON
注册该事件处理程序:
mouseParam=5;
cvSetMouseCallback("win1",mouseHandler,&mouseParam); //第三个参数可以设置为NULL
(2) 处理键盘事件:
实际上对于键盘输入并没有专门的事件处理程序.
按一定间隔检测键盘输入(适用于循环体中):
int key;
key=cvWaitKey(10); // wait 10ms for input
中止程序等待键盘输入:
int key;
key=cvWaitKey(0); // 显示图像时若没有该函数则图片一闪而过
键盘输入的循环处理程序:
while(1){
key=cvWaitKey(10);
if(key==27) break;
switch(key){
case 'h':
...
break;
case 'i':
...
break;
}
}
(3) 处理滑动条事件:
定义一个滑动条处理程序:
void trackbarHandler(int pos)
{
printf("Trackbar position: %d\n",pos);
}
注册该事件处理程序:
int trackbarVal=25;
int maxVal=100;
cvCreateTrackbar("bar1", "win1", &trackbarVal ,maxVal , trackbarHandler);
获取当前的滑动条位置:
int pos = cvGetTrackbarPos("bar1","win1");
设置滑动条位置:
cvSetTrackbarPos("bar1", "win1", 25);