Создание простой поисковой системы изображений в OpenCV и Flask
Простейшая демонстрация использования OpenCV для загрузки изображения и поиска цвета, связанного с этим изображением, и демонстрации идей в веб-приложении на основе Flask. Я не буду вдаваться в подробности как OpenCV, так и Flask, и я расскажу, что на самом деле делает приложение.
Приложение состоит из двух частей: веб-приложения, которое используется для хранения изображений из Интернета и отображения обработанных изображений и их доминирующих цветов, и сценария командной строки, который запускается для загруженного изображения и извлекает цветовые коды. Веб-изображение выглядит следующим образом:
Вы выполняете поиск изображений по цветовому коду, и он возвращает результат, как показано ниже:
И вид одного изображения выглядит так:
Давайте обсудим основную часть системы, то есть сценарий командной строки, выполняющий основную работу.
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. Это незрелый продукт, так как он не может рассказать вам об уникальных цветах на картинке. Он просто сообщает вам информацию, основанную на цветах пикселей, а не выполняет цветовую сегментацию и кластеризацию на основе алгоритма машинного обучения.