[:,:: ::-1]在python中是什么意思?

时间:2018-12-11 02:00:10

标签: python cv2

我正在运行一个程序,并且下面有代码。但是我不知道[:,:,::-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

2 个答案:

答案 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格式切换为您将以哪种格式显示。