Рубрики
Без рубрики

Определение цветов в изображениях с использованием Python и Opencv

Привет всем, я постараюсь объяснить в этом сообщении, как мы можем использовать модель без присмотра ML, чтобы найти м … Теги с Python, MachineLearning, WebDev.

Всем привет,

Я постараюсь объяснить в этом посте, как мы можем использовать модель без присмотра ML, чтобы найти наиболее используемые цвета на изображении.

Кластеризация KMAINS

Кластеризация KMAINS Это алгоритм кластеризации, который означает, что он используется для разделения заданных данных в подгруппы, основанные на основании таких, что данные в одной подгруппе или кластере отличаются от данных в другой подгруппе или кластере. Кластеризация является одним из методов, используемых в инсусперсизованном машинном обучении. Это означает, что производительность алгоритма не оценивается путем сравнения его выхода на истинные этикетки данных, вместо этого цель состоит в том, чтобы расследовать структуру данных, группируя ее в кластеры или подгруппы.

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

Строительство модели в ноутбуке Jupyter или Google Colaboratory

Импорт

Мы начинаем, импортируя библиотеки, которые мы собираемся использовать. Мы будем использовать matplotlib.pyplot Чтобы генерировать круговую диаграмму, OpenCV, чтобы прочитать изображение, Kmeans алгоритм от Sklearn.cluster пакет, RGB2Lab Чтобы преобразовать цвета изображения в лабораторию и Delta Cie76 сравнить их. Мы также будем использовать модуль ОС для объединения путей при чтении файлов и Счетчик из библиотеки коллекции, чтобы извлечь счет. Импорт должен выглядеть так:

import os
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import cv2
from collections import Counter
from skimage.color import rgb2lab, deltaE_cie76

Так как мы работаем в ноутбуке Jupyter, нам также нужно добавить % Matplotlib Inline Чтобы сказать MatPlotlib отображать участки внутри ноутбука.

Использование OpenCV для чтения изображения

Изображения можно прочитать, используя метод cv2.read () Передав полный путь в качестве аргумента. Мы можем использовать Pyplot, чтобы построить это изображение.

image = cv2.read(os.path.join('path_to_image', 'image.jpg')
plt.imshow(image)

На этом этапе вы заметите, что есть что-то не так с цветом изображения, который наносится. Это потому, что OpenCV считывает изображение в синие зеленые красные цвета и просмотреть фактическое изображение, которое нам нужно преобразовать в красный зеленый синий, используя метод cv2.cvtcolor) .

image = cv2.CvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image)

Цветная идентификация

Сначала нам нужна функция для преобразования значений RGB в COLEX COLEX, чтобы мы могли использовать их в качестве меток в нашей круговой диаграмме. Мы используем форматирование строки для этого, которые Отображает наши целые числа в качестве шестнадцатеричных чисел. Мы могли бы также использовать метод binaccii.hexlify () Отказ

def RGB2HEX(color):
    return "#{:02x}{:02x}{:02x}".format(int(color[0]), int(color[1]), int(color[2]))

Получение цвета из изображения

Сначала мы уменьшим размер изображения, чтобы уменьшить время выполнения нашей программы. Нам также необходимо преобразовать форму массива, содержащего изображение на то, что мы могли бы перейти к нашему кластеру, поэтому преобразуйте массив на 2 измерения.

mod_img = cv2.resize(img, (600, 400), interpolation = cv2.INTER_AREA)
mod_img = mod_img.reshape(mod_img.shape[0]*mod_img.shape[1], 3)

Теперь мы реализуем MDERSS

number_of_colours = 8
clf = KMeans(n_clusters = number_of_colours)
labels = clf.fit_predict(modified_image)

Алгоритм KMAINS создает кластеры на основе поставленного подсчета кластеров, которые в нашем случае будут топ-цвета. Мы используем подходит и прогнозировать на том же изображении и извлечь прогноз в переменную этикетки Отказ

Подсчитывать цвета и построение круговой диаграммы

Мы используем Счетчик Чтобы получить счет всех меток I.E. Сколько раз каждое значение присутствует в этикетки Отказ Чтобы найти цвета, мы используем clf.cluster_centers_ где все центроиды всех кластеров хранятся. Мы повторяем через ключи в считает и получить Заказ_colours Это способ узнать, какие данные принадлежат к какому кластеру (здесь мы используем это для группировки подобных цветов для обеспечения лучшего результата), и теперь у нас есть значения для того, сколько раз присутствует цвет на рисунке. Наконец, мы преобразуем значения в шестнадцатеричные коды и храните их в hex_colours Отказ

Мы зарабатываем круговую диаграмму со значениями из считает и этикетки от hex_colours. . Мы также получаем цвета для круговой диаграммы от hex_colors.

counts = Counter(labels)
center_colours = clf.cluster_centers_
ordered_colours =  [center_colors[i] for i in counts.keys()]
hex_colors = [RGB2HEX(ordered_colors[i]) for i in counts.keys()]
plt.figure(figsize = (8, 6))
plt.pie(counts.values(), labels = hex_colors, colors = hex_colors)

Принося все вместе в функцию

Эта функция принимает три аргумента: путь к изображению, нет цветов, чтобы быть идентифицированным и логическими show_chart отображать круговую диаграмму.

def get_colours(img_path, no_of_colours, show_chart):
    img = get_img(img_path)
    mod_img = cv2.resize(img, (600, 400), interpolation = cv2.INTER_AREA)
    mod_img = mod_img.reshape(mod_img.shape[0]*mod_img.shape[1], 3)

    #Define the clusters
    clf = KMeans(n_clusters = no_of_colours)
    labels = clf.fit_predict(mod_img)

    counts = Counter(labels)
    counts = dict(sorted(counts.items()))

    center_colours = clf.cluster_centers_
    ordered_colours = [center_colours[i] for i in counts.keys()]
    hex_colours = [RGB2HEX(ordered_colours[i]) for i in counts.keys()]
    rgb_colours = [ordered_colours[i] for i in counts.keys()]

    if (show_chart):
        plt.figure(figsize = (8, 6))
        plt.pie(counts.values(), labels = hex_colours, colors = hex_colours)
        return
    else:
        return rgb_colours

Вы можете найти тетрадь Google Colab здесь: https://github.com/mushahidq/py_colour_identifier/blob/main/colour_identifier.ipynb

Я скоро сделаю еще один пост о том, как превратить это в веб-приложение и развернуть в Heroku.

Это мой первый пост, поэтому некоторые отзывы будут высоко оценены.

Оригинал: “https://dev.to/mushahidq/identifying-colours-in-images-using-python-and-opencv-4g3j”