У меня есть изображения колес, и мне нужно распечатать цвет колеса из изображения. Обнаруживаемые цвета: черный, серый, серебристый, белый, бронзовый, синий, красный и зеленый.
Я начал с определения цветовых границ, определения цветовых диапазонов и отображения значений на консоли. Но теперь я хочу распечатать только цвет колеса, и я не могу принять наибольшее значение числа пикселей, потому что наибольшее значение будет для фона изображения.
Колеса всегда большие и расположены в центре. Они всегда колеса, а фон всегда solid. Это не может быть узором, полосатым или случайным, и цвет только белый или серый.
import numpy as np
import cv2
import sys
image = cv2.imread('/home/devop/Pictures/11.jpg')
color_boundaries = {
"Red": ([0, 0, 255], [127, 0, 255]),
"Green": ([0 , 255 , 0], [0 , 255 , 0]),
"Blue": ([255, 38, 0], [255, 38, 0]),
"White": ([255 , 255 , 255],[255 , 255 , 255]),
"Black": ([0 , 0 , 0],[0 , 0 , 0]),
"Bronze": ([205, 127, 50], [205, 127, 50]),
"Gray": ([160, 160, 160], [160, 160, 160]),
"Silver": ([192 , 192 , 192],[192 , 192 , 192])
}
for color_name, (lower, upper) in color_boundaries.items():
# create NumPy arrays from the boundaries
lower = np.array(lower, dtype = np.uint8)
upper = np.array(upper, dtype = np.uint8)
# find the colors within the specified boundaries and apply the mask
mask = cv2.inRange(image, lower, upper)
output = cv2.bitwise_and(image, image, mask = mask)
if mask.any():
print(f"{color_name}: {mask.sum()}")
Что я получил после выполнения программы:
White: 50822520
Black: 1020
Gray: 8925
Silver: 11985
Образец изображения: