我正在运行一个程序,并且下面有代码。但是我不知道[:,:,::-1]到底能做什么。运行程序时出现以下错误,因此了解[:,:,::-1]的功能将有助于我进行调试。谢谢。
while True:
ix = np.random.choice(np.arange(len(lists)), batch_size)
imgs = []
labels = []
for i in ix:
# images
img_path = img_dir + lists.iloc[i, 0] + '.png'
original_img = cv2.imread(img_path)[:, :, ::-1]
resized_img = cv2.resize(original_img, dims+[3])
array_img = img_to_array(resized_img)/255
imgs.append(array_img)
错误:
original_img = cv2.imread(img_path)[:, :, ::-1]
TypeError: 'NoneType' object is not subscriptable
答案 0 :(得分:1)
假设您的图像具有三个平面-R,G和B。然后命令[:, :, ::-1]
将颠倒颜色平面的顺序,使其分别为B,G和R。这是因为按照惯例,OpenCV使用的BGR格式(请参见here)。因此,您将BGR转换为RGB仅仅是因为我们现在喜欢RGB。
但是,您的错误与对命令的理解无关。问题是cv2.imread()
命令无法读取图像,并且正在返回None
。您输入的路径可能有误。
答案 1 :(得分:1)
这是特定于numpy的,不适用于大多数python对象。 :
的意思是“在这个维度上取得一切”,而::-1
的意思是“在这个维度上取得一切,但倒退”。矩阵具有三个维度:高度,宽度和颜色。在这里,您要将颜色从BGR翻转为RGB。这是必需的,因为OpenCV的颜色按BGR(蓝色/绿色/红色)顺序排列,而大多数其他成像库的颜色按RGB顺序排列。这段代码会将图片从OpenCV格式切换为您将以哪种格式显示。