Python 中有很多包能够处理图像,如 matplotlib, PIL, imageio, OpenCV 等。其中,OpenCV 提供了强大的图像处理模块,但是,OpenCV 读取图像的方式与其他包差别较大,比如读取的彩色图像通道顺序是 BGR。同时,OpenCV 读取图像的能力也很强大,不仅能够读取灰度、彩色,还能读取任何可能颜色格式的图像。这也为使用 OpenCV 读取图像变得难以掌握。本篇介绍如何使用 OpenCV 读取图像。
安装 OpenCV
假设已经安装了 Miniconda, 那么安装 OpenCV 只需要一条命令:
1 2 3
| pip install opencv-python
pip install opencv-contrib-python
|
上面两个命令都能安装 OpenCV,其中 opencv-python 为基本包,包含了 OpenCV 中的主要模块,常规使用足够。opencv-contrib-python 中除了包含主要模块外,还包括一些扩展模块,这些扩展模块包含了一些带专利的算法(比如 shift 特征检测模块)以及一些新添加的测试模块(稳定后合并到主要模块)。
读取图像
安装好后,使用 OpenCV 读取图像只需要一条命令:
1 2 3
| import cv2 as cv
img = cv.imread(img_path, flag)
|
安装 OpenCV 后,导入的模块是 cv2,img_path 为图像文件路径,flag 为读取文件标识。flag 有如下取值,需要根据不同的图像类型进行选择:
1 2 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):
1 2 3
| img = cv.imread(img_path, 1)
img = cv.imread(img_path, IMREAD_COLOR)
|
OpenCV 读取的图像是 numpy.ndarray 对象,且彩色图像的通道顺序为 BGR,通过查看 ndarray 形状,可获知图像的高、宽信息:
1 2 3
| img.shape (417, 563, 3)
|
支持的图像类型
OpenCV 支持多种图像类型,具体如下:
1 2 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