图像基本操作
图片属性¶
img.shape
获取图像的形状,图片是彩色的话,返回一个包含行数(高度)、列数(宽度)和通道数的元组,灰度图只返回行数和列数:
print(img.shape) # (263, 247, 3)
# 形状中包括行数、列数和通道数
height, width, channels = img.shape
# img是灰度图的话:height, width = img.shape
img.dtype
获取图像数据类型:
print(img.dtype) # uint8
经验之谈:多数错误是因为数据类型不对导致的,所以健壮的代码应该对这个属性加以判断。
img.size
获取图像总像素数:
print(img.size) # 263*247*3=194883
ROI¶
ROI:Region of Interest,感兴趣区域。什么意思呢?比如我们要检测眼睛,因为眼睛肯定在脸上,所以我们感兴趣的只有脸这部分,其他都不care,所以可以单独把脸截取出来,这样就可以大大节省计算量,提高运行速度。
截取ROI非常简单,指定图片的范围即可(后面我们学了特征后,就可以自动截取:
# 截取脸部ROI
face = img[100:200, 115:188]
cv2.imshow('face', face)
cv2.waitKey(0)
通道分割与合并¶
彩色图的BGR三个通道是可以分开单独访问的,也可以将单独的三个通道合并成一副图像。分别使用cv2.split()
和cv2.merge()
:
b, g, r = cv2.split(img)
img = cv2.merge((b, g, r))
split()
函数比较耗时,更高效的方式是用numpy中的索引,如提取B通道:
b = img[:, :, 0]
cv2.imshow('blue', b)
cv2.waitKey(0)