基本属性
包括:
读取到的图片数据的类型
图片数据的类型
图片的维度
图片的形状
图片的大小
import cv2 # 导入 cv2
from functools import reduce
img = cv2.imread("***.jpg") # 读取图片
print('type of image: ', type(img))
print('dtype of image: ', img.dtype)
print('dim of image :', img.ndim)
print('shape of image :', img.shape)
print('size of image :', img.size)
print('{} = {}'.format('*'.join(map(str, img.shape)), reduce(lambda x, y: x * y, img.shape)))
结果:
type of image: <class 'numpy.ndarray'>
dtype of image: uint8
dim of image : 3
shape of image : (574, 733, 3)
size of image : 1262226
5747333 = 1262226
总结:
从上面结果中可以看到,opencv读取出的图片类型其实是ndarray,因此可以联想到numpy数据中具备的一些功能接口,在这里也是通用的。
颜色空间
- opencv 中读取到的图像数据,3个通道的排列顺序依次为B,G,R,因此直接读取出的图像显示效果与原图不相同,需要将通道顺序调整为RGB
# 法1: 提取出各通道,直接调整顺序
import cv2
import numpy as np
img= cv2.imread("****.jpg")
img_shape = img.shape
img_b = img[ :, :, 0]
img_g = img[ :, :, 1]
img_r = img[ :, :, 2]
img_rgb = np.full(img_shape, 0, dtype=np.uint8)
img_rgb [ :, :, 0] = img_r
img_rgb [ :, :, 1] = img_g
img_rgb [ :, :, 2] = img_b
# 或者直接使用简便方法
img_rgb = img_rgb[ :, :, ::-1] # 第3个维度,也就是通道维度,以相反的顺序排布
# 法2:直接使用cv2.cvtColor转换通道顺序
img_bgr = cv2.cvtColor(img, cv2.COLOR_BRG2RGB)
plt.imshow(img_bgr)
通道数据的拆分与组合
b, g , r = cv2.split(img) # 拆分为独立的3个通道数据
merge_img = cv2.merge([r, g, b]) # 将3个通道数据组合形成一幅图片像素