场景:
我们都知道灰度图或者红外图都是单通道图片,而彩色图片是三通道图片。但是当我们用img.shape读取灰度图/红外图片的时候返回的却是三通道结果。
import cv2img_path = r'灰度图'
img = cv2.imread(img_path)
print(img.shape) # 如果我将图片灰度处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(gray.shape)"""
img.shape返回的结果:
(201, 190, 3)
gray.shape返回的结果:
(201, 190)
"""
问题在于我们直接用opencv 读取图片时似乎都是三通道图片,只有在灰度处理后才回显示单通道。针对这一问题我查了些资料:
opencv在默认情况下会读取3个通道的图像,如果是灰度图/红外图片则会将其图层复制三次(BGR缺省,B==G==R),因此读出来的图片是三通道。
解决:
如果我们想一开始就按照单通道读取灰度图片/红外图片的话,可以在imread()函数中加入相关参数(cv2.IMREAD_GRAYSCALE):
import cv2img_path = r'灰度图'
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
print(img.shape)"""
img.shape返回的结果:
(201, 190)
"""
这样就会直接按照单通道的方式读取。