图像的读取、显示以及保存。
OpenCV 模块介绍
这里只列出常用的几个模块。
core – 核心功能模块,包含以下内容:
- OpenCV基本数据结构
- 动态数据结构
- 绘图函数
- 数组操作相关函数
- 辅助功能与系统函数和宏
- 与OpenGL的互操作
highgui – 高层 GUI 图形用户界面,包含以下内容:
- I/O 输入输出
- 视频捕捉
- 图像和视频的编码解码
- 图形交互界面的接口
imgproc – Image Processing 的缩写,图像处理模块,包含以下内容:
- 线性和非线性的图像滤波
- 图像的几何变换
- 其它(Miscellaneous)图像转换
- 直方图相关
- 结构分析和形状描述
- 运动分析和对象跟踪
- 特征检测
- 目标检测
头文件和命名空间
在写简单的 OpenCV 程序时,可以采用如下的标准配置:
若需要使用 C++ 标准库命名空间 std,则可以加入:
|
|
Mat 类型
cv::Mat类是用于保存图像以及其他矩阵数据的数据结构。默认情况下,其尺寸为0,我们也可以指定初始尺寸,比如,比如定义一个Mat类对象,就要写
成员函数 at(int y, int x)
可以用来存取图像元素,但是必须在编译时知道图像的数据类型,因为 cv::Mat
可以存放任意数据类型的元素。可以如下指定元素
图像的载入和显示
imread 载入图像
在官方文档中的定义为:
参数说明
filename
载入图像文件的路径名。如果图像文件不能被读取(由于文件丢失、缺少权限、不支持的格式),imread 函数返回一个空矩阵(Mat::data == NULL
)。目前,Windows 系统下 imread 函数支持的格式有:- Windows 位图 - .bmp, .dib
- JPEG 文件 - .jpeg, .jpg, *.jpe
- JPEG 2000 文件 - *.jp2
- PNG 文件 - *.png
- 便携图像格式 - .pbm, .pgm, *.ppm
- Sun rasters - .sr, .ras
- TIFF 文件 - .tiff, .tif
flags
flags 指定了加载图像的颜色类型,默认值为1。它的取值有CV_LOAD_IMAGE_ANYDEPTH
- 若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。CV_LOAD_IMAGE_COLOR
- 转换图像到彩色图CV_LOAD_IMAGE_GRAYSCALE
- 转换图像到灰度图>0 返回3通道图像
- =0 返回灰度图
- <0 返回包含 alpha 通道的加载图像
*如果想要载入最真实的图像,选择
CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR
namedWindow 创建窗口
在官方文档中的定义为:
参数说明
name
窗口名称,亦被用作窗口标识符。flags
窗口的标识,默认值为 WINDOW_AUTOSIZE 。它的取值有- WINDOW_NORMAL - 用户可以改变窗口大小
- WINDOW_AUTOSIZE - 窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小
- WINDOW_OPENGL - 窗口创建的时候可支持OpenGL
函数说明
namedWindow 函数创建了一个可以作为图像和进度条的容器窗口,通过窗口名称来调用它。
如果具有相同名称的窗口已经存在,则函数不执行任何操作。
可以调用 destroyWindow(const string& winname)
或者destroyAllWindows()
函数来关闭窗口,并释放分配给窗口的内存空间。但是对于简单的程序,我们没有必要手动调用上述的函数,因为在退出时,所有的应用程序资源和窗口会被操作系统会自动关闭。
imshow 显示图像
在官方文档中的定义为:
参数说明
- winname
显示图像的窗口名称 - mat
所显示的图像
函数说明
imshow 函数用于在指定的窗口中显示图像。如果窗口是用CV_WINDOW_AUTOSIZE
(默认值)标识创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口。
imshow 函数缩放图像,取决于图像的深度:
- 如果图像是8位无符号类型(8-bit unsigned),显示原图。
- 如果图像是16位无符号类型(16-bit unsigned)或32位整型(32-bit integer),用像素值除以256。也就是说,值的范围从[0,255*256]映射到[0,255]。
如果图像是32位浮点型(32-bit floating-point),像素值要乘以255。也就是说,值的范围从[0,1]映射到[0,255]。
如果调用 imshow 函数前没有创建窗口,则创建一个标识为CV_WINDOW_AUTOSIZE
的窗口。
imshow 函数后总是应该调用waitKey(int ms)
函数。否则,不会显示图像。waitKey(0)
将始终显示窗口直到有按键按下。
imwrite 保存图像到文件
在官方文档中的定义为:
参数说明
- filename
保存文件名 - img
所要保存的图像 - params
特定格式编码的参数,默认值为 vector() 。可以取值如下: - 对于 JPEG 格式的图片,这个参数表示图片质量(
CV_IMWRITE_JPEG_QUALITY
),值越高图片质量越好。从0到100取值,默认值是95. - 对于 PNG 格式的图片,这个参数表示压缩级别(
CV_IMWRITE_PNG_COMPRESSION
),更高的值意味着更小的尺寸和更长的压缩时间。从0到9取值,默认值是3。 - 对于PPM,PGM,或PBM格式的图片,这个参数表示一个二进制格式标志(
CV_IMWRITE_PXM_BINARY
),取值为0或1,默认值是1。
- 对于 JPEG 格式的图片,这个参数表示图片质量(