Training_Data=[]IMG_SIZE=100def 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
中追加的元素数量是原来的三倍?
回答:
默认情况下,如果不将cv2.IMREAD_GRAYSCALE
作为参数传入,cv2.imread
会以三通道(RGB格式)读取图像。当你传入cv2.IMREAD_GRAYSCALE
作为参数时,每像素的位数会发生变化(你只需要1*8位每像素,而不是3*8位)。
如果你愿意,可以使用depth()
和channels()
函数来检查你的图像的深度和通道,这可能会帮助你更好地理解发生了什么。