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'>
- 形状。当标志位
flags
为cv2.IMREAD_COLOR
或cv2.IMREAD_UNCHANGED
时(彩色图),形状为(H, W, C)
;当标志位flags
为cv2.IMREAD_GRAYSCALE
时(灰度图),形状为(H, W)
。其中H
为高度,W
为宽度,C=3
为通道数。提示:可以使用numpy
的转置方法将形状调整为(C, H, W)
(注意:转置之后就不能再使用cv2.resize
、cv2.cvtColor
等函数了,因为cv2
并不知道你转置了,cv2
只认识形状为(H, W, C)
的图片)。
img = img.transpose(2, 0, 1) # 形状(H, W, C)转置为(C, H, W)
- 彩色图的通道顺序。默认通道顺序为
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
:数值被平移或缩放到一个指定的范围,线性归一化,常用。NORM_INF
:分母为L∞范数 ,即矩阵各元素绝对值的最大值(切比雪夫距离)NORM_L1
:分母为L1-范数,即矩阵元素的绝对值之和(曼哈顿距离)NORM_L2
:分母为L2-范数,即矩阵各元素的欧几里德距离之和
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
参考