图像的读取与显示
图像读取函数imread
imread()函数的原型:
Mat imread(const String & filename,
int flags = IMRAD_COLOR
)
- filname:需要读取图像的文件名称,包含图像地址、名称、和图像文件扩展名
- flags:读取图像形式的标志
imread()函数读取图像形式参数
| 标记参数 | 简记 | 作用 |
|---|---|---|
| IMREAD_UNCHANGED | -1 | 按照图像原样读取,保留Alpha通道(第四通道) |
| IMREAD_GRAYSCALE | 0 | 将图像转成单通道灰度图像后读取 |
| IMREAD_COLOR | 1 | 将图像转成3通道BGR彩色图像 |
| IMREAD_ANYDEPTH | 2 | 保留原图像的16位、32位深度,不声明该参数则转成8位读取 |
| IMREAD_ANYCOLOR | 4 | 以任何可能的颜色读取图像 |
| IMREAD_LOAD_GDAL | 8 | 使用gdal驱动程序加载图像 |
| IMREAD_REDUCED_GRAYSCALE_2 | 16 | 将图像转成单通道灰度图像,尺寸缩小1/2,可以更改最后一位数字 |
| IMREAD_REDUCED_COLOR_2 | 17 | 将图像转成3通道彩色图像,尺寸缩小1/2,可以更改最后一位数字 |
| IMREAD_IGNORE_ORIENTATION | 128 | 不以EXIF的方向旋转图像 |
图像窗口函数namedWindow
namedWindow函数的原型
void namedWindow(const String & winname,
int flags = WINDOW_AUTOSIZE
)
- winname:窗口名称,用作窗口的标识符
- flags:窗口属性设置标志
该函数会创建一个窗口变量,用于显示图像和滑动条,通过窗口的名称引用该窗口
如果在创建窗口时已经存在具有相同名称的窗口,则该函数不会执行任何操作
OpenCV提供了2个关闭窗口资源的函数
destroyWindow()函数和destroyWindows()
前一个用于关闭一个指定名称窗口,后一个函数用于关闭程序中的所有窗口
namedWindows()函数窗口属性标志参数:
| 标志参数 | 简记 | 作用 |
|---|---|---|
| WINDOW_NORMAL | 0x00000000 | 显示图像后,允许用户随意调整窗口大小 |
| WINDOW_AUTOSIZE | 0x00000001 | 根据图像大小显示窗口,不允许用户调整大小 |
| WINDOW_OPENGL | 0x00001000 | 创建窗口的时候会支持OpenGL |
| WINDOW_FULLSCREEN | 1 | 全屏显示窗口 |
| WINDOW_FREERATIO | 0x00000100 | 调整图像尺寸以充满窗口 |
| WINDOW_KEEPRATIO | 0x00000000 | 保持图像的比例 |
| WINDOW_GUI_EXPANDED | 0x00000000 | 创建的窗口允许添加工具栏和状态栏 |
| WINDOW_GUI_NORMAL | 0x00000010 | 创建没有工具栏和状态栏的窗口 |
图像显示函数imshow
imshow()函数的原型:
void imshow(const String & winname,
InputArray mat
)
- winname:要显示图像的窗口的名称,用字符串形式赋值
- mat:要显示的图像矩阵
如果此函数之前没有创建同名的图像窗口,就会与WINDOW_AUTOSIZE标志创建一个窗口,显示图像的原始大小
如果创建了一个窗口,那么就会缩放图像以适应窗口属性
- 如果是8位无符号类型,那么按原样显示
- 如果是16位无符号类型或32位整数类型,那么会将像素除以256,将范围[0,255*256] 映射到[0,255]
- 如果是32位或64位浮点类型,那么会将像素乘以256,将范围[0,1] 映射到[0,255]
imshow()函数后常常跟有 waitKey()函数,用于将程序暂停一段时间,以ms为单位进行秒计,参数默认或为“0”,那么等待用户按键结束