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;