Изучаем opencv вместе (2): преобразование канала изображения и цветового пространства

OpenCV

Этот кейс написан на основе версии opencv4.x
Кодовый адрес:GitHub.com/Гу Депэн/Body…

1. Каналы

Изображение может иметь n каналов, а n означает, что каждый пиксель изображения состоит из нескольких значений.Для N-канального изображения a×b матрица изображения фактически представляет собой цифровую матрицу с n строками b и столбцами a .

2. Цветовое пространство

Часто используемые цветовые пространства:

  • фон: 3 канала
  • серый: изображение в градациях серого, 1 канал
  • bgra: 4 канала, последний канал — прозрачность

3. Преобразование цветового пространства

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cvtColor(src, code, dst=None, dstCn=None)

  • src: объект изображения для преобразования
  • код: тип преобразования
  • dst: тип цветовой карты
  • dstCn: количество выходных каналов, 0 — количество каналов для автоматического получения src

4. Разделить канал

img = cv2.imread("./img/opencv.jpg", cv2.IMREAD_COLOR)
(B, G, R) = cv2.split(img)
B1 = img[:, :, 0]
G1 = img[:, :, 1]
R1 = img[:, :, 2]

split(m, mv=None)

  • m: изображение, которое нужно сегментировать

img[:, :, n]

  • n: n-й канал

5. Объединить каналы

newimg = cv2.merge([B, G, R])

merge(mv, dst=None)

  • mv: канал для слияния

6. Получить свойства изображения

(h, w, c) = img.shape
  • h: высота изображения
  • w: ширина изображения
  • c: количество каналов изображения

7. Создайте матрицу

import numpy as np
zero = np.zeros(img.shape, dtype=np.uint8)

zeros(shape, dtype=None, order='C') создает матрицу со всеми нулями

one(shape, dtype=None, order='C') создает матрицу со всеми единицами

  • shape: размер создаваемой матрицы
  • dtype: тип значения матрицы

8. Копировать канал

cv2.mixChannels([img], [zero], [0, 0, 1, 1, 2, 2])

mixChannels(src, dst, fromTo)

  • src: список объектов изображения для копирования каналов
  • dst: список объектов изображения для копирования каналов
  • fromTo: скопировать с какого канала на какой канал