图像的加载:imread()
函数原型:Mat imread(const String& filename, int flags)
- 第一个参数 filename 是图片的路径
- 第二个参数 flags 为载入标志,指定一个加载图像的颜色类型,默认值为1
支持的图片格式:
- Windows bitmaps - .bmp, .dib
- JPEG files - .jpeg, .jpg, *.jpe
- JPEG 2000 files - *.jp2
- Portable Network Graphics - *.png
- WebP - *.webp
- Portable image format - .pbm, .pgm, .ppm .pxm, *.pnm
- PFM files - *.pfm
- Sun rasters - .sr, .ras
- TIFF files - .tiff, .tif
- OpenEXR Image files - *.exr
- Radiance HDR - .hdr, .pic
- Raster and Vector geospatial data supported by GDAL
第二个参数flags对应的值:
- IMREAD_UNCHANGED = -1 //返回的数据带有alpha通道(R,G,B,A )
- IMREAD_GRAYSCALE = 0 //将图像转换为单通道灰度图像
- IMREAD_COLOR = 1 //将图像转换成3通道BGR彩色图像
- IMREAD_ANYDEPTH = 2 //在输入具有相应深度时返回16位/32位图像
- IMREAD_ANYCOLOR = 4, //图像可能以任何颜色格式读取
- IMREAD_LOAD_GDAL = 8, //使用gdal驱动程序加载图像
- IMREAD_REDUCED_GRAYSCALE_2 = 16 //将图像转换为单通道灰度图像且图像大小减少1/2
- IMREAD_REDUCED_COLOR_2 = 17 //将图像转换为3通道BGR彩色图像且图像大小减少1/2
- IMREAD_REDUCED_GRAYSCALE_4 = 32 //将图像转换为单通道灰度图像且图像大小减少1/4
- IMREAD_REDUCED_COLOR_4 = 33 //将图像转换为3通道BGR彩色图像且图像大小减少1/4
- IMREAD_REDUCED_GRAYSCALE_8 = 64 //将图像转换为单通道灰度图像且图像大小减少1/8
- IMREAD_REDUCED_COLOR_8 = 65 //将图像转换为3通道BGR彩色图像且图像大小减少1/4
- IMREAD_IGNORE_ORIENTATION = 128 //不会根据EXIF的方向标志旋转图像
图像的显示:imshow()
函数原型:imshow (const String &winname, InputArray mat)
- 第一个参数是显示的窗口名称
- 第二个参数为显示的图像
图像的写入:imwrite()
函数原型:bool imwrite(const String& filename, InputArray img, const std::vector<int>& params = std::vector<int>())
- 第一个参数表示需要写入的文件名,必须要加上后缀,比如“1.jpg”
- 第二个参数表示Mat类型的图像数据
- 第三个参数表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),一般情况下不用写这个参数
代码示例
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 创建四个图像的矩阵,内容为同一张图片的不同颜色类型
Mat image1 = imread("/home/efort/Downloads/timg.jpeg", 1);
Mat image2 = imread("/home/efort/Downloads/timg.jpeg", 0);
Mat image3 = imread("/home/efort/Downloads/timg.jpeg", 16);
Mat image4 = imread("/home/efort/Downloads/timg.jpeg", 32);
// 显示四张不同颜色类型的图片
imshow("原图", image1);
imshow("灰度图", image2);
imshow("1/2灰度图", image3);
imshow("1/4灰度图", image4);
// 将image1和image2写入目录,注意后面有.jpg的后缀
imwrite("/home/efort/Downloads/原图.jpg", image1);
imwrite("/home/efort/Downloads/灰度图.jpg", image2);
waitKey(0); // 一直显示窗口,直到任意按键按下
return 0;
}
运行结果如下 ,出现了四张不同颜色类型的图,并且在Downloads这个目录下创建了原图.jpg和灰度图.jpg这两个文件。