1-канальное извлечение и слияние
В цифровой обработке изображений канал изображения относится к разделению информации о цвете в изображении на различные компоненты цвета. Общие каналы изображения включают каналы RGB, каналы оттенков серого, каналы HSV и т. д.
Канал RGB относится к разделению изображения на три цветовых канала: красный, зеленый и синий, и каждый канал представляет яркость соответствующего цвета. Этот способ является наиболее распространенным, он очень важен для обработки цветных изображений.
Канал оттенков серого относится к преобразованию информации о цвете в изображении в значение яркости в оттенках серого и использованию одного канала для представления всего изображения. Этот метод больше подходит для черно-белых изображений или когда в цветных изображениях необходимо учитывать только информацию о яркости изображения.
Канал HSV относится к разделению информации о цвете в изображении на три канала: оттенок (H), насыщенность (S) и яркость (V). Этот метод является более интуитивным, чем RGB, в управлении изменением цвета и больше подходит для настройки цвета при обработке изображений.
При обработке изображений обычно используются разные каналы для обработки изображений и управления ими. Например, использование каналов в градациях серого может упростить обработку изображений, поскольку необходимо учитывать только один канал, а использование каналов RGB может упростить отображение изображений на устройствах с цветным дисплеем. При обработке и анализе изображений выбор соответствующих каналов и комбинаций каналов очень важен и может помочь нам лучше понимать изображения и управлять ими.
1 форма массива
Данные указанного канала могут быть извлечены в виде массива, либо данные указанного канала могут быть извлечены с помощью разбиения cv2.
Благодаря индексации каждый канал может быть извлечен непосредственно из изображения. Информация о канале находится в последнем столбце каждой строки массива.
# 以下代码使用数组的形式对通道进行处理
import cv2
lena = cv2.imread("lenacolor.png")
cv2.imshow("lena1", lena)
b = lena[:, :, 0]
g = lena[:, :, 1]
r = lena[:, :, 2]
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
Приведенный выше код может извлекать и отображать данные трех каналов BGR соответственно. Следует отметить, что порядок каналов cv2 не является привычным RGB.
lena[:, :, 0] = 0
cv2.imshow("lenab0", lena)
lena[:, :, 1] = 0
cv2.imshow("lenab0g0", lena)
cv2.waitKey()
cv2.destroyAllWindows()
Приведенный выше код может реализовать пакетное назначение определенного канала и присвоить определенному каналу значение 0, то есть удалить этот канал в некоторой степени. Обработанное изображение претерпит изменения в цветности.
2 формы разделения и слияния
Функция cv2.split() способна разбивать каналы изображения. Например, следующий оператор может использоваться для разделения цветного изображения BGR img для получения изображения B-канала b, изображения G-канала g и изображения R-канала r.
b, g, r=cv2.split(img)
b=cv2.split(img)[0]
g=cv2.split(img)[1]
r=cv2.split(img)[2]
Выше приведены два метода извлечения каналов с помощью разделения.
После обработки канала BGR для отображения графики необходимо объединить три канала.
bgr = cv2.merge([b, g, r])
rgb = cv2.merge([r, g, b])
cv2.imshow("real", bgr)
cv2.imshow("fake", rgb)
Обычно нам все еще нужно объединять графики в порядке BGR. Но если мы не будем следовать этому порядку или введем данные из других диапазонов, получится ложная картина (концепция, которая будет более знакома студентам, изучающим дистанционное зондирование).