Создание простой поисковой системы изображений в OpenCV и Flask

Простейшая демонстрация использования OpenCV для загрузки изображения и поиска цвета, связанного с этим изображением, и демонстрации идей в веб-приложении на основе Flask. Я не буду вдаваться в подробности как OpenCV, так и Flask, и я расскажу, что на самом деле делает приложение.

Приложение состоит из двух частей: веб-приложения, которое используется для хранения изображений из Интернета и отображения обработанных изображений и их доминирующих цветов, и сценария командной строки, который запускается для загруженного изображения и извлекает цветовые коды. Веб-изображение выглядит следующим образом:
Снимок экрана-2019-09-08-at-2.01.41-PM.png

Вы выполняете поиск изображений по цветовому коду, и он возвращает результат, как показано ниже:
Снимок экрана-2019-09-08-at-2.06.04-PM.png

И вид одного изображения выглядит так:
Снимок экрана-2019-09-08-at-2.44.46-PM.png

Давайте обсудим основную часть системы, то есть сценарий командной строки, выполняющий основную работу.

def process_image(image_name):
    color_count = {}
    print('Processing the image {}'.format(image_name))
    path = 'website/static/uploaded_images/' + image_name

    image = cv2.imread(path)

    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            (b, g, r) = image[i, j]
            h_value = rgb2hex(r, g, b)

            if h_value in color_count:
                color_count[h_value] += 1
            else:
                color_count[h_value] = 1
    return color_count

После импорта компьютерного зрения мы читаем изображение с диска, вызывая cv2.imread (). Данные доступны в виде массива numpy, поэтому с помощью метода shape можно найти такие детали, как ширина, высота и канал. 

OpenCV хранит данные изображения в формате BGR вместо цветового пространства RGB. После получения данных в формате BGR мы используем специальный метод rgb2hex для преобразования цвета RGB в HEX. Затем функция возвращает список словарей, состоящий из цветового кода в HEX и его частоты, который мы будем использовать для определения процентного содержания цвета в изображении.

Вывод

Итак, это было базовое руководство по обработке изображений в OpenCV. Это незрелый продукт, так как он не может рассказать вам об уникальных цветах на картинке. Он просто сообщает вам информацию, основанную на цветах пикселей, а не выполняет цветовую сегментацию и кластеризацию на основе алгоритма машинного обучения.

Ответить