Работа с цветовыми пространствами в лаборатории

OpenCVBeginner
Практиковаться сейчас

Введение

Добро пожаловать в этот туториал по цветовым пространствам OpenCV-Python!

Цветовое пространство - это способ представления цветовых каналов в изображении. Существует несколько различных цветовых пространств, но три наиболее распространенных из них следующие:

  • BGR (Blue, Green, Red): Стандартное цветовое пространство, используемое OpenCV.
  • Gray: Серая шкала изображения.
  • HSV (Hue, Saturation, Value): Цилиндрическое представление цветов в координатах.
    В этом туториале мы сосредоточимся на преобразовании изображений между цветовыми пространствами BGR, Gray и HSV.

Используйте функцию cv.cvtColor() для преобразования и отображения изображений между цветовыми пространствами

Для преобразования изображений между цветовыми пространствами мы используем функцию cv.cvtColor(). Сначала импортируем необходимые библиотеки и прочитаем изображение:

Откройте Python-интерпретатор

Откройте Python-интерпретатор, введя следующую команду в терминале.

python3

Используйте функцию cv.imread() для чтения изображения image.jpg, которое мы подготовили в стандартной папке.

import cv2 as cv
import numpy as np

## Прочитайте изображение
image = cv.imread('image.jpg')

BGR в Gray

Для преобразования изображения из BGR в Gray используйте флаг cv.COLOR_BGR2GRAY:

## Преобразование изображения в оттенки серого
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

BGR в HSV

Для преобразования изображения из BGR в HSV используйте флаг cv.COLOR_BGR2HSV:

## Используйте цветовое пространство HSV. Цветовое пространство HSV в основном используется для отслеживания объектов
hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)

Отображение преобразованных изображений

Для отображения исходного и преобразованного изображений используйте функции cv.imwrite():

## Сохраните изображение в указанный файл
cv.imwrite('image.jpg', image)
cv.imwrite('gray_image.jpg', gray_image)
cv.imwrite('hsv_image.jpg', hsv_image)

используйте функцию cv.inRange() для извлечения определенного цветного объекта из изображения

Для извлечения определенного цветного объекта из изображения можно использовать функцию cv.inRange(). В этом примере мы извлечем синий объект из изображения.

Определение диапазона цвета

Сначала определите нижние и верхние границы синего цвета в цветовом пространстве HSV:

## Синий цвет в HSV представляется при оттенке около 240 градусов из 360.
## Диапазон оттенков в OpenCV-HSV составляет 0-180, чтобы хранить значение в 8 битах.
## Таким образом, синий цвет в OpenCV-HSV представляется значением H около 240 / 2 = 120.
## Чтобы правильно определить синий цвет, можно выбрать следующие значения:
blue_lower = np.array([100, 150, 0], np.uint8)
blue_upper = np.array([140, 255, 255], np.uint8)

Пороговая обработка изображения

Пороговая обработка изображения в HSV, чтобы оставить только синие цвета:

## Маска для синего цвета
blue_mask = cv.inRange(hsv_image, blue_lower, blue_upper)

Применение маски

Примените маску к исходному изображению, чтобы извлечь синий объект:

## Используйте маску для извлечения синего объекта
blue_object = cv.bitwise_and(image, image, mask=blue_mask)

Отображение извлеченного объекта

Отобразите исходное изображение и извлеченный синий объект:

## Сохраните изображение в указанный файл
cv.imwrite('blue_object.jpg', blue_object)

Резюме

В этом туториале мы рассмотрели основы цветовых пространств OpenCV-Python. С этими знаниями вы теперь можете работать с разными цветовыми пространствами и применять их к различным задачам обработки изображений. Также вы можете экспериментировать с другими цветовыми пространствами, поддерживаемыми OpenCV, такими как LAB или YCrCb.