Python 中有很多包能够处理图像,如 matplotlib, PIL, imageio, OpenCV 等。其中,OpenCV 提供了强大的图像处理模块,但是,OpenCV 读取图像的方式与其他包差别较大,比如读取的彩色图像通道顺序是 BGR。同时,OpenCV 读取图像的能力也很强大,不仅能够读取灰度、彩色,还能读取任何可能颜色格式的图像。这也为使用 OpenCV 读取图像变得难以掌握。本篇介绍如何使用 OpenCV 读取图像。
安装 OpenCV
假设已经安装了 Miniconda, 那么安装 OpenCV 只需要一条命令:
| 12
 3
 
 | pip install opencv-python
 pip install opencv-contrib-python
 
 | 
上面两个命令都能安装 OpenCV,其中 opencv-python 为基本包,包含了 OpenCV 中的主要模块,常规使用足够。opencv-contrib-python 中除了包含主要模块外,还包括一些扩展模块,这些扩展模块包含了一些带专利的算法(比如 shift 特征检测模块)以及一些新添加的测试模块(稳定后合并到主要模块)。
读取图像
安装好后,使用 OpenCV 读取图像只需要一条命令:
| 12
 3
 
 | import cv2 as cv
 img = cv.imread(img_path, flag)
 
 | 
安装 OpenCV 后,导入的模块是 cv2,img_path 为图像文件路径,flag 为读取文件标识。flag 有如下取值,需要根据不同的图像类型进行选择:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | IMREAD_UNCHANGED            = -1, //返回包含alpha通道的加载图像IMREAD_GRAYSCALE            = 0,  //返回一个灰度图像
 IMREAD_COLOR                = 1,  //返回一个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通道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/8。
 IMREAD_IGNORE_ORIENTATION   = 128 //不旋转图像根据EXIF的定位标志。
 
 | 
读取图像时,flag 可以传入整数值或标识,如下命令读取彩色图像(注意,如果不传 flag,默认为 1):
| 12
 3
 
 | img = cv.imread(img_path, 1)
 img = cv.imread(img_path, IMREAD_COLOR)
 
 | 
OpenCV 读取的图像是 numpy.ndarray 对象,且彩色图像的通道顺序为 BGR,通过查看 ndarray 形状,可获知图像的高、宽信息:
| 12
 3
 
 | img.shape(417, 563, 3)
 
 
 | 
支持的图像类型
OpenCV 支持多种图像类型,具体如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | -   Windows bitmaps - \*.bmp, \*.dib (always supported)-   JPEG files - \*.jpeg, \*.jpg, \*.jpe (see the *Note* section)
 -   JPEG 2000 files - \*.jp2 (see the *Note* section)
 -   Portable Network Graphics - \*.png (see the *Note* section)
 -   WebP - \*.webp (see the *Note* section)
 -   Portable image format - \*.pbm, \*.pgm, \*.ppm \*.pxm, \*.pnm (always supported)
 -   PFM files - \*.pfm (see the *Note* section)
 -   Sun rasters - \*.sr, \*.ras (always supported)
 -   TIFF files - \*.tiff, \*.tif (see the *Note* section)
 -   OpenEXR Image files - \*.exr (see the *Note* section)
 -   Radiance HDR - \*.hdr, \*.pic (always supported)
 -   Raster and Vector geospatial data supported by GDAL (see the *Note* section)
 
 | 
参考文献
- OpenCV之imread,imwrite,imshow