在处理文件前需要引入OpenCV库,同时也引入unmpy库
import cv2 import numpy as np
1 基本的读写操作
1.1 图像文件的读写操作
1.1.1 图像文件的读取操作
opencv 的 imread() 函数和 imwrite() 函数支持各种静态图像文件格式。例如bmp, png, jpeg, tiff等。
cv2.imread(filename[, flags])
imread() 函数从文件中加载并返回该图像,若指定图像不能被读取(文件丢失、权限不正确、不支持或非法的格式等等),则返回一个空的矩阵。
opencv 为 flags 提供了枚举类型文档,主要有
- IMREAD_UNCHANGED 如果设置,则按原样返回加载的图像(使用Alpha通道,否则会被裁剪)。
- IMREAD_GRAYSCALE 如果设置,则始终将图像转换为单通道灰度图像。
- IMREAD_COLOR 如果设置,请始终将图像转换为3通道BGR彩色图像。
- IMREAD_ANYDEPTH 如果设置,当输入深度为16/32位时,则返回相应的深度,否则将其转换为8位。
- IMREAD_ANYCOLOR 如果设置,则以任何可能的颜色格式读取图像。
- IMREAD_LOAD_GDAL 如果设置,请使用gdal驱动程序加载图像。
备注1:
cv :: ImreadModes {
cv :: IMREAD_UNCHANGED = -1,
cv :: IMREAD_GRAYSCALE = 0,
cv :: IMREAD_COLOR = 1,
cv :: IMREAD_ANYDEPTH = 2, cv :: IMREAD_ANYCOLOR = 4, cv :: IMREAD_LOAD_GDAL = 8}
具体参考 Image file reading and writing
备注2:
filename 可以是绝对路径,也可以是相对路径。
win环境下的绝对路径:D:\\grandfather\\father\\test.png
Unix下的文件间隔符为 /
备注3:
无论采用哪种模式,imread() 函数均会删除所有透明alpha 通道信息。
备注4:
当图像文件为灰度格式时,imread() 函数也会返回 BGR(red-green-blue) 格式的图像,BGR与RGB所表示的色彩空间相同,但是字节顺序相反。
备注5:
那怎么读取灰度图文件后再保存为灰度图呢?
增加imread()函数的 flags 参数即可
grayImage = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE) cv2.imwrite('NewTest.png', grayImage)
1.1.2 图像文件的写入操作
imwrite(filename, img[, params])
该函数将图像保存为指定文件中
图像格式是根据文件扩展名选择的,一般情况下,该函数只能保存8位单通道或3位通道(按“BGR”通道顺序)的图像。
具体可参看1.1.1 中的代码示例。
另:
opencv可以读取一个格式图像文件,保存时选取另一种格式图像文件。
将 png --> jpg 格式。
image = cv2.imread('test.png') cv2.imwrite('test.jpg',image)
1.2 图像与原始字节之间的转换
无论哪种格式的图像,每个像素都有一个对应值,但不同格式所表示的像素方式也存在有差异。