当 cv2.imread 接收 cv2.IMREAD_GRAYSCALE 作为参数时数组的不同长度

Different length of array when cv2.imread receives cv2.IMREAD_GRAYSCALE as argument

Training_Data=[]
IMG_SIZE=100

def build():
    Directory="D:\projects\Machine_learning\Dog_Cat\PetImages"
    CATEGORY=["Cat","Dog"]
    for category in CATEGORY:
        path=os.path.join(Directory,category)
        class_num=CATEGORIES.index(category)
        for img in tqdm(os.listdir(path)):
            try:
                img_array=cv2.imread(
                    os.path.join(path,img),
                    cv2.IMREAD_GRAYSCALE
                )
                new_array=cv2.resize(img_array(IMG_SIZE,IMG_SIZE))
                Training_Data.append([new_array,class_num])
            except Exception as e:
               pass

当我不通过 cv2.IMREAD_GRAYSCALE 时,它给出了不同长度的数组:

img_array=cv2.imread(os.path.join(path,img))

X = 74598

Y = 24886

为什么不使用 cv2.IMREAD_GRAYSCALE 时在 training_data 中追加 3 倍的元素?

默认情况下,当您不传递 cv2.IMREAD_GRAYSCALE 作为参数时,cv2.imread 将使用三个通道读取您的图像(它将加载您的图像为 RGB)。当您将 cv2.IMREAD_GRAYSCALE 作为参数传递时,您的每像素位数会发生变化(您只需要每像素 1*8 位而不是 3*8)。

如果需要,您可以使用 depth()channels() 函数检查您的图像 depth and channels,这可能有助于您更好地了解正在发生的事情。