上一话我们已经把opencv的环境配置完成,那么我们接下来分析一下上一话的例子。
图像读入:imread
首先我们来看一下代码
1 | #include<opencv2/opencv.hpp> |
这个是使用c++来写的,而opencv就是机遇c++开发的,所以我们使用c++来对imread,imshow以及imwrite这三个API进行讲解。当然在使用c++调用opencv的API有两种方法,一种就是在前面引用opencv的命名空间,然后直接调用其API;二是使用域解析符(::)加上要调用的函数名称。在这个例子中我所使用的就是第一种方法。
接下来我们看一下imread函数
1 | Mat cv::imread(const string& filename,int flags=MREAD_COLOR); |
Parameters:
- **filename:**需要加载的文件
- **flags:**是指加载图片时的标识,指定图片的类型
Mat类型是一个矩阵类型,如果imread对文件无法解码,就会返回一个NULL,空的矩阵。
opencv支持的图片包含以下几种
- Windows bitmaps - *.bmp, *.dib (always supported)
- JPEG files - *.jpeg, .jpg, *.jpe (see the *Notes section)
- JPEG 2000 files - *.jp2 (see the Notes section)
- Portable Network Graphics - *.png (see the Notes section)
- WebP - *.webp (see the Notes section)
- Portable image format - *.pbm, *.pgm, *.ppm (always supported)
- Sun rasters - *.sr, *.ras (always supported)
- TIFF files - .tiff, *.tif (see the *Notes section)
NOTE:
imread这个函数读取图片是根据文件内容来读取,而不是根据文件的扩展名。
imread的flags有以下几种:
1 | IMREAD_UNCHANGED = -1, //返回包含alpha通道的加载图像 |
图像的显示:imshow
imshow主要用于显示图像,将加载到内存中的图像显示出来
1 | void imshow(const string& winname,InputArray mat); |
Parameters:
- 第一个参数: const string&类型的winname,将要显示的窗口标识名称
- 第二个参数:InputArray类型的mat,需要显示的图像
图像的保存:imwrite
虽然在例子中没有使用imwrite但是有必要说明一下imwrite这个函数的使用
1 | bool imwrite(const string& filename,InputArray img, |
Parameters:
- 第一个参数:const string&类型的filename,要保存的文件名,要带上后缀例如”123.jpg”.
- 第二个参数:InputArray类型的img,一般填入一个Mat类型的图像数据
- 第三个参数:const std::vector& params表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),所以一般情况下不用写。如果要填写,则有以下几个方面需要了解:
- 对于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.