Работа с изображениями с помощью OpenCV
OpenCV предоставляет мощный API для работы с изображениями на Python. В этом разделе рассматриваются основные операции: чтение, отображение и сохранение изображений с использованием библиотеки OpenCV и массивов NumPy.
Работа с изображениями с помощью OpenCV
Введение
OpenCV предоставляет мощный API для работы с изображениями на Python. В этом разделе рассматриваются основные операции: чтение, отображение и сохранение изображений с использованием библиотеки OpenCV и массивов NumPy.
Импорт библиотеки OpenCV
Для начала работы с OpenCV необходимо импортировать библиотеку:
1
import cv2
Чтение изображений с диска
Функция cv2.imread() загружает изображение в виде массива NumPy. Принимает два аргумента: путь к файлу и флаг режима чтения:
1
2
3
4
5
# Чтение изображения в цветном режиме
img = cv2.imread('/home/pi/dataset/image.tiff', cv2.IMREAD_COLOR)
# Альтернативная запись с числовым флагом
img = cv2.imread('/home/pi/dataset/image.tiff', 1)
Флаги режимов чтения изображений
cv2.IMREAD_COLOR(1) - чтение в цветном режиме (по умолчанию)cv2.IMREAD_GRAYSCALE(0) - чтение в оттенках серогоcv2.IMREAD_UNCHANGED(-1) - чтение изображения как есть
Отображение изображений
Для отображения изображений используются функции cv2.imshow(), cv2.waitKey() и cv2.destroyWindow():
1
2
3
4
5
6
7
8
# Отображение изображения в окне
cv2.imshow('Stormtrooper', img)
# Ожидание нажатия клавиши
cv2.waitKey(0)
# Закрытие окна
cv2.destroyWindow('Stormtrooper')
Создание окон заранее
Можно предварительно создать окно с определенными параметрами:
1
2
# Создание окна с автоматическим размером
cv2.namedWindow('Lena', cv2.WINDOW_AUTOSIZE)
Полный пример чтения и отображения
1
2
3
4
5
6
7
8
9
import cv2
# Чтение изображения
img = cv2.imread('/home/pi/dataset/4.2.03.tiff', 1)
# Отображение
cv2.imshow('Stormtrooper', img)
cv2.waitKey(0)
cv2.destroyWindow('Stormtrooper')
Сохранение изображений
Функция cv2.imwrite() сохраняет массив NumPy как изображение:
1
2
# Сохранение изображения
cv2.imwrite('output.jpg', img)
Обработка нажатий клавиш
Функция cv2.waitKey() может использоваться для обработки различных нажатий клавиш:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2
img = cv2.imread('/home/pi/dataset/4.2.03.tiff', 1)
cv2.imshow('Stormtrooper', img)
keyPress = cv2.waitKey(0)
if keyPress == ord('q'):
# Закрытие при нажатии 'q'
cv2.destroyWindow('Stormtrooper')
elif keyPress == ord('s'):
# Сохранение при нажатии 's'
cv2.imwrite('test.jpg', img)
cv2.destroyWindow('Stormtrooper')
Типичные проблемы и решения
Проблема: Ошибка при чтении файла Решение: Проверьте путь к файлу и права доступа. Используйте абсолютные пути.
Проблема: Изображение не отображается
Решение: Убедитесь, что после cv2.imshow() следует cv2.waitKey(0)
Проблема: Окно не закрывается
Решение: Используйте cv2.destroyAllWindows() для гарантированного закрытия всех окон
Проблема: Неправильные цвета при отображении
Решение: OpenCV использует BGR вместо RGB. Для правильного отображения конвертируйте: cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
Освоение базовых операций работы с изображениями в OpenCV является фундаментом для более сложных задач компьютерного зрения. Понимание принципов чтения, отображения и сохранения изображений позволяет эффективно работать с визуальными данными и подготавливает к реализации сложных алгоритмов обработки изображений на платформе Raspberry Pi.
