IndexError: неверный индекс для скалярной переменной NumPy - PullRequest
0 голосов
/ 23 января 2020

Итак, я попытался преобразовать изображение в массив с PIL и NumPy. Затем я попытался перебрать файл и получить из него все изображения, а затем посмотреть, сколько у него красного, зеленого и синего пикселей, чтобы увидеть, каков основной цвет изображения, и я попробовал это:

import numpy as np
import os
import time
from PIL import Image


def load_image(image: str):
    img = Image.open(image)
    img.load()
    return img


def image_to_array(image):
    array_img = np.asarray(image, dtype="int32")
    return array_img


def get_image_color(image):
    img = load_image(image)
    img_array = image_to_array(img)
    time.sleep(0.05)
    red = 0
    green = 0
    blue = 0
    for i in img_array:
        for j in i:
            if j[0] != j[1] != j[2]:
                if j[0] > j[1] and j[0] > j[2]:
                    red += 1
                elif j[1] > j[0] and j[1] > j[2]:
                    green += 1
                elif j[2] > j[0] and j[2] > j[1]:
                    blue += 1

    if red > green and red > blue:
        return "Red Image"
    elif green > red and green > blue:
        return "Green Image"
    elif blue > red and blue > green:
        return "Blue Image"


def get_all_images(path: str):
    images = os.listdir(path)
    return images

PATH = "File's Path here"

red_images = get_all_images(f"{PATH}\\Red_Images\\")
green_images = get_all_images(f"{PATH}\\Green_Images\\")
blue_images = get_all_images(f"{PATH}\\Blue_Images\\")

for red_img in red_images:
    print(red_img)
    print(f"Picture: {red_img.split('.')[0]} =", get_image_color(f"{PATH}\\Red_Images\\{red_img}"))

Когда я запускаю его через for l oop, он обнаруживает первое изображение, но второе проходит ошибку индекса

Это вывод:

    red_image1.jpg
    Picture: red_image1 = Red Image
    red_image2.jpg
    Traceback (most recent call last):
      File "ADD_PATH_HERE/color_from_image.py", line 57, in <module>
        print(f"Picture: {red_img.split('.')[0]} =", get_image_color(f" 
   {PATH}\\Red_Images\\{red_img}"))
      File "ADD_PATH_HERE/color_from_image.py", line 27, in get_image_color
        if j[0] > j[1] and j[0] > j[2]:
    IndexError: invalid index to scalar variable.

1 Ответ

0 голосов
/ 23 января 2020

Итак, подведем итог в ответе: С помощью следующего кода у меня нет проблем с его запуском:

import numpy as np
import os
import time
from PIL import Image


def load_image(image: str):
    img = Image.open(image)
    img.load()
    return img


def image_to_array(image):
    array_img = np.asarray(image, dtype="int32")
    return array_img


def get_image_color(image):
    img = load_image(image)
    img_array = image_to_array(img)
    time.sleep(0.05)
    red = 0
    green = 0
    blue = 0
    for i in img_array:
        for j in i:
            if j[0] != j[1] != j[2]:
                if j[0] > j[1] and j[0] > j[2]:
                    red += 1
                elif j[1] > j[0] and j[1] > j[2]:
                    green += 1
                elif j[2] > j[0] and j[2] > j[1]:
                    blue += 1

    if red > green and red > blue:
        return "Red Image"
    elif green > red and green > blue:
        return "Green Image"
    elif blue > red and blue > green:
        return "Blue Image"


def get_all_images(path: str):
    images = os.listdir(path)
    return images

PATH = "File's Path here"

red_images = get_all_images("/home/user/Pictures/")

for red_img in red_images:
    print(red_img)
    print(f"Picture: {red_img.split('.')[0]} =", get_image_color(f"/home/user/Pictures/{red_img}"))

Проблема, похоже, в вашей второй картине. Возможно, неправильный формат, так как вы загружаете их как dtype="int32". Но код правильный.

...