highGUI图形用户界面

1 #include <opencv2\core\core.hpp>
2 #include <opencv2\highgui\highgui.hpp>
3 using namespace cv;

图像载入、显示、输出到文件

图像载入:imread()函数

原型:

1 Mat imread(const string& filename, int flag=1);

(1)第一个参数,载入的图片路径名。

(2)第二个参数为载入标识,在opencv标识图像格式的枚举体中取值,指定一个加载图像的颜色类型。默认载入三通道的彩色图像。

1 CV_LOAD_IMAGE_UNCHANGED = -1; //新版本废弃
2 CV_LOAD_IMAGE_GRAYSCALE = 0; //将图像转换为灰度再返回
3 CV_LOAD_IMAGE_COLOR = 1; //图像转换到彩色再返回
4 CV_LOAD_IMAGE_ANYDEPTH = 2; //载入图像为16位或32位,就返回对应深度图像,否则转换为8位图像再返回
5 CV_LOAD_IMAGE_ANYCOLOR = 4; 
6 
7 CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR; //1|4 载入三通道图
8 CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR; //2|4 载入真实无损的源图像

flags是int型变量,不再枚举体中取值,则:

  • flags>0返回一个3通道彩色图像
  • flags=0返回灰度图
  • flags<0返回包含Apha通道(透明色)的加载图像

图像显示:imshow()函数

void imshow(const string& winname, InputArray mat)

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

(2)第二个参数,需要显示的图像,当做Mat类即可

imshow函数用于在指定的窗口中显示图像,如果窗口是用CV_WINDOW_AUTOSIZE(默认值)创建的,就显示图像原始大小,否则将图像进行缩放以适应窗口。

创建窗口:namedWindow()函数

若简单的图片显示就不用这个函数,但需要显示窗口之前就用到窗口名时,例如滑动条就要制定依附到某个窗口上,就需要这个函数先创建出窗口,显式的规定窗口名称。

namedWindow函数是通过指定的名字,创建一个可以作为图像和进度条的容器窗口,如果具有相同名称的窗口已经存在,则函数不做任何事情。

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

(1)被用作窗口的标识符的窗口名称

(2)窗口标识:

1 WINDOW_NORMAL = 0; //可改变窗口的大小,CV_WINDOW_NORMAL
2 WINDOW_AUTOSIZE = 1; //窗口大小会自动调整以适应所显示的图像,用户不能手动改变窗口大小,CV_WINDOW_AUTOSIZE
3 WINDOW_OPENGL = 2; //窗口创建时会支持OpenGL,CV_WINDOW_OPENGL

可用通过destroyWindow()或destroyAllWindow()函数关闭创区,并取消之前分配的与窗口相关的所有内存空间。

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

imgwrite函数用于将图像保存到指定的文件,图像格式是基于文件扩展名的,可保存的扩展名和imread中可以读取的图像扩展名一致。

bool imwrite(const string& filename, InputArray img, cost vector<int>& params=vector<int>() );

(1)需要写入的文件名,带后缀;

(2)Mat类型的图像数据

(3)const vector<int>&类型的params,表示为特定格式保存的参数编码,默认值vector<int>(),一般情况下不用填写,如果需要的话:

  • JPEG,这个参数表示0~100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95
  • PNG,这个参数表示压缩级别(CV_IMWRITE_PNG_COMPRESSION),0~9,默认值3。较高的值意味着更小的尺寸和更长的压缩时间
  • PPM/PGM/PBM,这个参数表示一个二进制格式标志(CV_IMWRITE_BINARY),取值0或1,默认1。

滑动条的创建和使用

创建滑动条:createTrackbar()函数

创建一个可以调整数值的滑动条,并将滑动条附加到指定的窗口上,往往会和一个回调函数配合起来使用。

1 int creatTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0)

(1)const string&类型的trackbarname,轨迹条的名字

(2)cosnt string&类型的winname,窗口的名字

(3)int*类型的value,指向整型的指针,表示滑块的位置,创建时,滑块的初始位置就是该变量当前的值;

(4)int类型的cout,滑块可以到达的最大位置的值,滑块的最小位置始终为0;

(5)TrackbarCallback类型的onChange,默认值0。指向回调函数的指针,回调函数原型必须为 void xxxx(int, void*),第一个参数是轨迹条的位置,第二个参数是用户数据。如果回调是NULL指针,表示没有回调函数的调用,仅value有变化。

(6)void*类型的serdata,默认值0。用户传给回调函数的数据,处理轨迹条事件。如果value实参是全局变量,不用管userdata。

获得当前轨迹条的位置:getTrackbarPos()函数

int getTrackbarPos(const string& trackbarname, const string& winname);

(1)const string&类型的trackbarname,轨迹条的名字

(2)const string&类型的winname,轨迹条父窗口的名字;

鼠标操作

 类似于滑动条的消息映射方式,都是通过一个中介函数配合一个回调函数来说显得。指定鼠标操作回调函数的函数为SetMouseCallback:

1 void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0)

(1)const string&类型的winname,窗口名字;

(2)MouseCallback类型的onMouse,指定窗口里的每次鼠标时间发生的时候,被调用的函数指针。

这个函数的原型为void Foo(int event, int x, int y, int flags, void* param),其中event是EVENT_+(opencv2中CV_ENENT_+)变量之一,x和y是鼠标指针在图像坐标系(不是窗口坐标系)中的坐标值,flags是EVENT_FLAG的组合,param是用户定义的出传递到SetMouseCallbace函数调用的参数。

EVENT_MOUSEMOVE为鼠标移动消息,EVENT_LBUTTONDOWN为鼠标左键按下消息。

(3)void*类型的userdata,用户定义的传递到回调函数的参数,默认值0

猜你喜欢

转载自www.cnblogs.com/pacino12134/p/10979238.html