OpenCV的高层GUI图形用户界面模块函数

Imread(), imshow(), namedWindow(),imwrite(), createTracbar(), getTrackbarPos(), setMouseCallback()

 

载入图像:imread():


Matimread(const string& filename, intflags = 1 );


如:Mat image = imread(“1.png”,199);    //载入彩色图片

(1)  第一个参数:载入图片的路径名,支持的图片格式有:bmp、jpg、png等。

(2)  第二个参数:载入标记,用于指定一个加载图像的颜色类型,默认值为1,表示载入三通道的彩色图像。

Flags>0:返回一个三通道的

Flags= 0:返回灰度图像

Flags< 0 :返回包含Alpha通道的加载图像


注:若以彩色模式载入图像,解码后的图像会以BGR的通道顺序进行存储,即蓝、绿、红的顺序,而不是通常的RGB顺序。




图像的显示imshow():


voidimshow(const string& winname, InputArray mat);


如:imshow(“原图”,srcImage)       //在指定的“原图”窗口显示srcImage图片

(1)第一个参数:需要显示的窗口标识名称

(2)第二个参数:显示的图像


注:InputArray和OutputArray类型可以简单地当做Mat类型即可。




创建窗口:namedWindow():


voidnamedWindow(const string& winname, int flags=WINDOW_AUTOSIZE);


若是简单地进行图片显示,就可以省略namedWindow()函数的调用,即imread()--imshow()即可。但若需要在显示窗口之前就用到窗口名时,就需要先调用namedWindow()创建窗口。

(1)第一个参数:窗口名称。

(2)第二个参数:窗口标识。它的值有三种:

     * WINDOW_NORMAL,用户可以无限制的改变窗口大小

     * WINDOW_AUTOSIZE,窗口大小会自动调整去适应所现实的图像,并且用户不能手动改变窗口大小。


     * WINDOW_OPENGL ,窗口可支持 OpenGL 。




输出图像到文件:imwrite():


boolimwrite(const string& filename, InputArray img, constvector<int>& params=vector<int>());


(1)第一个参数:填入要写入的文件名。要带上后缀,如“123.jpg”

(2)第二个参数:填入一个Mat类型的图像数据

(3)第三个参数::表示为特定格式保存的参数编码。有默认值。若要手动填写,需要了解:

           * 对于JPEG格式的图片,此参数表示0--100的图片质量

<CV_IMWRITE_JPEG_QUALITY>,默认值为95。

     * 对于PNG格式的图片,这个参数表示压缩级别

(CV_IMWRITE_PNG_COMPRESSION)从0到9。值越高,压缩时间越长,默认

值为3

     * 对于PPM、PGM、PBM格式的图片,这个参数表示一个二进制格式标志


       (CV_IMWRITE_PXM_BINARY), 取值为 0 或 1 ,默认值为 1.




创建滑动条:createTrackbar():


C++:int createTrackbar(const string& trackbarname, const string& winname,

int*value, int count, TrackbarCallback onChange=0, void* userdata=0 );


(1)第一个参数:滑动条的名字

(2)第二个参数:滑动条所依附的窗口的名字

(3)第三个参数:表示滑块的位置

(4)第四个参数:表示滑块可以到达的最大位置的值滑块最小位置的值永远是0.

(5)第五个参数:指向回调函数的指针(即回调函数的函数名),每次滑块位置改变时,这个函数就会进行回调,并且这个函数的原型必须是void XXXX(int , void* ),其中第一个参数是轨迹条的位置,第二个参数是用户数据(参考第六个参数)。若回调是NULL,表示无回调函数的调用,仅第三个参数value有变化。

(6)第六个参数:此参数是用户传给回调函数的数据,用于处理轨迹条事件。若第三个参数value是全局变量,则可不管userdata参数。

获取当前轨迹条的位置:getTrackbarPos():


C++:

IntgetTrackbarPos(const string& trackbarname,const string& winname);


 

鼠标操作:setMouseCallback():

  


VoidsetMouseCallback(const string& winname, MouseCallback onMouse,void *userdata=0 );


(1)第一个参数:窗口名称

(2)第二个参数:回调函数指针(函数名),回调函数原型必须是void Foo(int event, int x,int y, int flags, void *param)

(3)第三个参数:用户定义的传递到回调函数的参数


openCV 中的鼠标操作和滑动条的消息映射方式很类似,都是通过一个中介函数配合一个回调函数来实现的。




输出几种典型的数据结构:

1、定义和输出输出二维点:


Point2fp(6,2);

cout<<”【二维点】p=”<<p<<”;\n”<<endl;


2、定义和输出三维点:


Point3fp3f(2,5,7);

cout<<”【三维点】p3f=”<<p3f<<”;\n”<<endl;


3、定义和输出基于Mat的std::vector


Vector<float>v;

v.push_back(2);

v.push_back(4);

cout<<”【基于Mat的vector】shortvec=”<<Mat(v)<<”;\n”<<endl;


 

4、定义和输出std::vector点


vector<Point2f>  points(20);

for(size_ti = 0; i < points.size(); i++)

    points[i] = Point2f((float)(i * 5),(float)(i % 7));

cout<<”【二维点向量】points=”<<points<<”;”<<endl;