OpenCV High-level GUI模块

参考highgui module

  • waitKey(int delay=0)

    参数delay表示延迟的毫秒数,可指定时间结束动作,可返回按下键相应的值;如果在指定时间内未有动作,则返回-1;指定delay=0则表示按下键停止动作

  • SetMouseCallback(const String &winname, MouseCallback onMouse, void *userdata=0)

    • winname::窗口的名字
    • onMouse: 获取在指定窗口内鼠标动作的发生,监听鼠标的点击,移动,松开,判断鼠标的操作类型,并进行响应的函数处理。
  • createTrackbar(const String &trackbarname, const String &winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0)

  • getTrackbarPos(const String &trackbarname, const String & winname) 返回指定trackbar当前位置的值

  • nameWindow(const String &winname, int flags=WINDOW_AUTOSIZE) 生成一个window,尺寸以及调整大小选项由flags决定

  • setMouseCallback(const String &winname, MouseCallback onMouse, void *userdata=0) 根据获取鼠标回调函数的动作

  • setTrackbarMax(const String &winname, const String &winname, int naxval) 设置window中指定trackbar的最大值

  • setTrackbarPos(const String &trackbarname, const String &winname, int pos) 设置指定trackbar的数值

  • waitKey() 根据键盘的案件,返回相应的ASC码数值

  • onMouse(int event, int x, int y, int flags, void* ustc) 鼠标的回调函数,根据鼠标动作,执行具体操作

截图程序

     #include<iostream>
     #include <opencv.hpp>
     using namespace std;
     using namespace cv;


     Mat src,dst;
     Mat imageROI;
     Point pt1, pt2;    
     bool bCrop=0;

     void on_mouse( int event, int x, int y, int flags, void* ustc)
     {

        switch(event)
        {
            case EVENT_LBUTTONDOWN:
                    pt1=Point(x,y);
                    pt2=Point(x,y);
                    bCrop=1;
                break;
            case EVENT_MOUSEMOVE:
                    if(bCrop)
                    {
                            pt2=Point(x,y);
                            src.copyTo(dst);
                            rectangle(dst, pt1, pt2, Scalar(255,255,255), 3);
                            imshow("IMG", dst);
                    }
                    break;
            case EVENT_LBUTTONUP:
                    pt2=Point(x,y);
                    rectangle(dst, pt1, pt2, Scalar(255,255,255), 3);
                    bCrop=0;
                    break;
            default: break;
         }
    }

   int main(int agrc, char* argv[]){

        src=imread("white.jpg",1);
        src.copyTo(dst);
        namedWindow("IMG", 0);
        imshow("IMG",src);

        setMouseCallback( "IMG", on_mouse, NULL);
        while(true){
             int c = waitKey(0);
             if( (c & 255) == 27 )
             {
                    cout << "Exiting ...\n";
                    break;
              }
            switch((char)c)
             {
             case '\r':
            {
                imageROI = src(Rect(pt1, pt2));
                imshow("IMG", imageROI);
                break;
            }
            case 'r':
                src.copyTo(dst);
                imshow("IMG", src);
                break;
            default:
            {
                cout << "Exiting ...\n";
                break;
            }
        }
     }
    return 0;
}