一、读取imread
函数 imread 的原型如下:
Mat imread(const String& filename,int flags = IMREAD_COLOR)
filename 指定读取的图像文件
flag 指定读取图像的颜色,并在 imgcodecs.hpp 头文件中由如下枚举类型定义和解释:
enum { IMREAD_UNCHANGED = -1, // 8 位,彩色或非彩色-----默认读取方式
IMREAD_GRAYSCALE = 0, // 8 位,灰度
IMREAD_COLOR = 1, //未改变深度、颜色
IMREAD_ANYDEPTH = 2, //任意深度,未改变颜色
IMREAD_ANYCOLOR = 4, //未改变深度,任意颜色
IMREAD_LOAD_GDAL = 8 // 使用 gdaL 驱动程序
};
读取输入的图像文件之后,应检查操作是否成功。可使用成员函数 in_image.empty() 来实现这个检查。
二、显示imshow
void imshow(const String& winname,InputArray mat)
如果使用 WINDOW_AUTOSIZE 标志创建该窗口(winname),那么所显示的是原始大小的图像(mat)。
窗口的创建:
void namedWindow(const String& winname,int flags = WINDOW_AUTOSIZE)
OpenCV 窗口是通过程序中一个意义明确的名字来识别的。通过下面 highgui.hpp 头文件中的枚举给出该标志的定义及其说明:
enum { WINDOW_NORMAL = 0x00000000,
//用户可以调整窗口的大小(无约束)
//还可以将一个全屏窗口切换为常规窗口
WINDOW_AUTOSIZE = 0x00000001,
//用户不能调整窗口的大小,
//窗口的大小由显示的图像所限制
WINDOW_OPENGL = 0x00001000, // OpenGL 支持的窗口
WINDOW_FULLSCREEN = 1,
WINDOW_FREERATIO=0x00000100,
//图像可任意使用(调整图像时可没有比例限制)
WINDOW_KEE PRATIO = 0x00000000
//调整图像时保持图像的缩放比例
};
三、写入imwrite
bool imwrite(const String& filename,InputArray img,const vector<int>& params=vector<int>())
这个函数将一幅图像(img)保存到一个文件(filename),作为第三个可选参数,一个“属性-值”对的向量指定编解码器的参数(为使用默认值将其设置为空)。编解码器由文件的扩展名决定。
四、在内部循环中处理事件
如果在一个窗口上显示一幅图像之后不再做任何事情,出乎意料地,将不再显示图像。在一个窗口显示一幅图像之后,我们应该开始一个循环,以获取和处理与用户和窗口交互有关的事件。通过如下函数可执行这样一个任务(从 highgui 模块中):
int waitKey(int delay=0)//默认是0
这个函数在数毫秒(delay>0)内等待一个按键操作,并返回键的编码,如果延迟结束时没有按键则返回 -1。如果 delay 是 0 或负数,那么函数一直等待直到一个键被按下。
记住,只有至少创建和激活一个窗口时,函数 waitKey 才会工作。