1. python中各类图片读取工具的比较

参考Python各类图像库的图片读写方式总结可知,opencv的性能表现最好。opencv yyds

相关文章收藏:

  • Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()
  • Python各类图像库的图片读写方式总结

2. opencv常用函数

2.1 读取图片

cv2.imread(filename, flags)

参数解释
filename:图片的完整路径
flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE,cv2.IMREAD_UNCHANGED}

cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代
cv2.IMREAD_GRAYSCALE:读入灰度图片,可用0作为实参替代
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道,可用-1作为实参替代
PS:alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明

返回值
<class 'numpy.ndarray'>

  1. 形状。当标志位flagscv2.IMREAD_COLORcv2.IMREAD_UNCHANGED时(彩色图),形状为(H, W, C);当标志位flagscv2.IMREAD_GRAYSCALE时(灰度图),形状为(H, W)。其中H为高度,W为宽度,C=3为通道数。提示:可以使用numpy的转置方法将形状调整为(C, H, W)(注意:转置之后就不能再使用cv2.resizecv2.cvtColor等函数了,因为cv2并不知道你转置了,cv2只认识形状为(H, W, C)的图片)。
img = img.transpose(2, 0, 1)  # 形状(H, W, C)转置为(C, H, W)
  1. 彩色图的通道顺序。默认通道顺序为BGR,这与我们熟知的通道顺序RGB不一致,而且所有主流工具库的通道顺序都是RGB提示:当有需要时,可手动转换通道。
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

示例

img = cv2.imread('dataset/sample.png', flags=cv2.IMREAD_COLOR)  # 读取彩色图
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)                      # BGR转RGB

2.2 调整图片大小

cv2.resize(src, dsize, dst=..., fx=..., fy=..., interpolation=...)

参数解释
src:输入图片,numpy类型,必须保证形状为(高, 宽, 通道数)
dsize:调整后的大小,元组类型。填写(宽,高)(与输入图片形状的(高, 宽)相反),不填通道数
dst:输出图片,一般不用填。
fx,fy:图片沿x轴,y轴的缩放系数;当且仅当dsize=(0,0)disze=(-1,-1)时生效。
interpolation:插值方式。可选项如下

INTER_NEAREST: 最近邻插值
INTER_LINEAR: 双线性插值(默认设置)
INTER_AREA: 使用像素区域关系进行重采样
INTER_CUBIC: 4x4像素邻域的双三次插值
INTER_LANCZOS4: 8x8像素邻域的Lanczos插值

返回值
<class 'numpy.ndarray'> 即输入图片调整大小之后的图片。
示例

img = cv2.resize(img, (224, 224), interpolation=cv2.INTER_LINEAR)  # 基于双线性插值法调整大小为224*224

2.3 归一化

cv2.normalize(src, dst, alpha=..., beta=..., norm_type=..., dtype=..., mask=...)

对输入的numpy数组进行所有元素归一化(不区分维度)。
参数解释
src:输入数组
dst:输出,可以指定一个变量,赋值给它。可以不填或用None代替。
alpha:①范围归一化的下界;②值归一化的上界。
beta:仅范围归一化时生效,上界。
norm_type:归一化的类型,可选类型如下

NORM_MINMAX:数值被平移或缩放到一个指定的范围opencv 读取图片 图片数据处理 笔记_opencv,线性归一化,常用。
opencv 读取图片 图片数据处理 笔记_ci_02
NORM_INF:分母为L∞范数 ,即矩阵各元素绝对值的最大值(切比雪夫距离)
opencv 读取图片 图片数据处理 笔记_python_03
NORM_L1:分母为L1-范数,即矩阵元素的绝对值之和(曼哈顿距离)
opencv 读取图片 图片数据处理 笔记_ci_04
NORM_L2:分母为L2-范数,即矩阵各元素的欧几里德距离之和
opencv 读取图片 图片数据处理 笔记_计算机视觉_05

dtype:一个整数,输出的类型。默认-1,与输入的类型相同;其他值0:uint8,1:int8,2:uint6
mask:与src形状相同,相应位置上为1时会被归一化,为0时保持原值。

返回值
<class 'numpy.ndarray'>形状与输入相同。
示例

x = cv2.normalize(x, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)
x = cv2.normalize(x, None, alpha=1, norm_type=cv2.NORM_MINMAX)  # 与上一句等价,beta默认为0

参考