Введение
Добро пожаловать в этот туториал по цветовым пространствам 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.



