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

本文详细介绍了OpenCV的GUI高级功能,包括imread()用于加载图像,imshow()显示图像,namedWindow()创建窗口,imwrite()输出图像到文件,createTrackbar()创建滑动条,以及setMouseCallback()处理鼠标操作。同时讲解了各函数的参数和使用场景。
摘要由CSDN通过智能技术生成

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

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

 

载入图像:imread():

Matimread(const string& filename, intflags = 1 )

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

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

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

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

Flags= 0:返回灰度图像

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

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

图像的显示imshow():

voidimshow(const string& winname, InputArray mat);

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

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

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

注:InputArrayOutputArray类型可以简单地当做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)09。值越高,压缩时间越长,默认

值为3

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

       (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():

       C++:

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、定义和输出基于Matstd::vector

Vector<float>v;

v.push_back(2);

v.push_back(4);

cout<<”【基于Matvectorshortvec=”<<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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值