Итак, я попытался преобразовать изображение в массив с 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.