Базовые операции с изображением

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

Введение

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

Доступ к и изменение значений пикселей

Прежде чем начать эту лабораторию, участники должны открыть Python Shell в терминале в /home/labex/project

cd /home/labex/project

python3

Сначала давайте начнем с загрузки изображения и его отображения с использованием OpenCV:

import cv2

## Загрузить изображение
image = cv2.imread('image.jpg')

## Отобразить изображение
cv2.imwrite('Original Image.jpg', image)

Для доступа к значению пикселя достаточно указать его координаты (x, y) следующим образом:

pixel_value = image[y, x]

Значение пикселя представляет собой массив, содержащий цветовые каналы (B, G, R). Чтобы изменить значение пикселя, просто присвойте новое значение соответствующим координатам.

Вот пример, как установить пиксель [0:9, 0:9] в красный цвет:

for x in range(10):
    for y in range(10):
        image[x, y] = [0, 0, 255]  ## Установить пиксель в красный


cv2.imwrite('Modified Image.jpg', image)

Оригинальное изображение выглядит так:

Original image before modification

Изображение после изменения значений пикселей в диапазоне [0:9,0:9]:

Modified pixel values image

Пользователи могут проверить правильность результата, запустив код ниже.

Доступ к свойствам изображения

Свойства изображения включают количество строк, столбцов и каналов, а также тип данных изображения и общее количество пикселей.

Для доступа к размеру изображения (строки, столбцы и каналы) используйте атрибут shape:

height, width, channels = image.shape
print(height, width, channels)

## вывод
## 360 640 3

Для доступа к общему количеству пикселей используйте атрибут size:

total_pixels = image.size
print(total_pixels)

## вывод
## 691200

Для доступа к типу данных изображения используйте атрибут dtype:

image_dtype = image.dtype
print(image_dtype)

## вывод
## uint8

Настройка области интереса (ROI)

Область интереса (ROI) — это подизображение, которое мы можем извлечь из исходного изображения. Чтобы установить ROI, нам достаточно указать начальные и конечные координаты.

roi = image[start_y:end_y, start_x:end_x]

Например, чтобы извлечь ROI размером 100x100 пикселей из верхнего левого угла, мы можем сделать следующее:

roi = image[0:100, 0:100]
cv2.imwrite('ROI.jpg', roi)

Генерируемое изображение ROI.jpg выглядит так:

ROI example image

Разделение и объединение изображений

Для разделения изображения на свои цветовые каналы (B, G, R) используйте функцию cv2.split():

b, g, r = cv2.split(image)

Теперь мы можем отобразить отдельные каналы с использованием cv2.imwrite().
Для объединения каналов обратно в одно изображение используйте функцию cv2.merge():

merged_image = cv2.merge((b, g, r))

Например, чтобы поменять местами красный и синий каналы, мы можем сделать следующее:

swapped_image = cv2.merge((r, g, b))
cv2.imwrite('Swapped Channels Image.jpg', swapped_image)

Генерируемое изображение Swapped Channels Image.jpg выглядит так:

Swapped red and blue channels

Резюме

Вот и все! Вы узнали некоторые базовые операции с изображениями с использованием OpenCV-Python. Эти важные концепции помогут понять, как работать с изображениями в компьютерном зрении и при обработке изображений. Освоив эти базовые операции, вы сможете успешно приступить к разработке более сложных алгоритмов обработки изображений.