Во всех ответах обсуждаются методы поиска одного цвета на изображении, но всегда полезно знать, как найти несколько цветов на изображении. Особенно, когда вы имеете дело с изображениями задачи сегментации .
Давайте возьмем картинку для нашего объяснения

Очевидно, что каждый класс объектов на этом рисунке имеет свой цвет.
Давайте напишем функцию для загрузки изображения с URL-адреса и преобразования его в пустой массив. Таким образом становится очень легко работать с изображениями.
import numpy as np
import cv2
import urllib
from urllib.request import urlopen
import webcolors
import time
def getImageArray(mask):
req = requestObject(mask)
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
im = cv2.imdecode(arr, -1)
im = im[:, :, :3]
return im
def requestObject(mask):
temp_req = {'status': 403}
retry_counter = 1
while((temp_req['status'] != 200) and (retry_counter <= 10)):
try:
req = urlopen(mask)
temp_req = {"status": 200}
except:
print("Retrying for: ", retry_counter)
temp_req = {"status": 403}
time.sleep(4)
retry_counter = retry_counter + 1
return req
Теперь давайте получим изображение:
url = 'https://4.bp.blogspot.com/-qeqDYBU1BRk/WggDh_wNvMI/AAAAAAAAYmo/i6hHDVQEZRAT3BG5G20xiOFuxLvb7DyTwCLcBGAs/s1600/frame0.jpg'
image = getImageArray(url)
Давайте напишем функцию, чтобы найти все цвета:
def bgr_to_hex(bgr):
rgb =list(bgr)
rgb.reverse()
return webcolors.rgb_to_hex(tuple(rgb))
def FindColors(image):
color_hex = []
for i in image:
for j in i:
j = list(j)
color_hex.append(bgr_to_hex(tuple(j)))
return set(color_hex)
color_list = FindColors(image)
Попробуйте запустить приведенный выше скрипт в своем терминале, и вы получите список шестнадцатеричных кодов для всех цветов в переменной color_list
.
Дайте мне знать, если код работает / не для вас :)