Найти в Дзене

OpenCV: Основы обработки изображений с примерами кода

OpenCV (Open Source Computer Vision Library) — это библиотека для обработки изображений и компьютерного зрения. Она используется в: Первым делом установим библиотеку: pip install opencv-python import cv2
# Загружаем изображение (входные данные - файл 'input.jpg')
# Второй аргумент:
# cv2.IMREAD_COLOR - цветное (по умолчанию)
# cv2.IMREAD_GRAYSCALE - ч/б
# cv2.IMREAD_UNCHANGED - с альфа-каналом
img = cv2.imread('input.jpg', cv2.IMREAD_COLOR)
# Проверяем успешность загрузки
if img is None:
print("Ошибка загрузки изображения!")
else:
# Сохраняем изображение (результат - файл 'output.jpg')
cv2.imwrite('output.jpg', img)
print("Изображение успешно обработано!") Цветовые пространства — это математические модели, которые описывают цвета в виде числовых значений.
OpenCV и другие библиотеки используют разные форматы представления цветов. python import cv2
import matplotlib.pyplot as plt
# Загружаем изображение
img = cv2.imread('input.jpg')
# Конвертируем BGR (OpenCV) в RGB (
Оглавление

OpenCV (Open Source Computer Vision Library) — это библиотека для обработки изображений и компьютерного зрения. Она используется в:

  • 📸 Фильтрации и преобразовании изображений.
  • 🚗 Распознавании объектов (лица, машины, дорожные знаки).
  • 🤖 Глубоком обучении (нейросетях).
  • 🎥 Анализе видео (трекинг, стабилизация).

🌍 Где применяется OpenCV?

  1. Медицина: Анализ рентгеновских снимков, диагностика заболеваний
  2. Безопасность: Распознавание лиц в системах видеонаблюдения
  3. Автомобили: Беспилотные транспортные системы
  4. Ретушь: Фильтры в Instagram и других соцсетях
  5. Дополненная реальность: Фильтры в Snapchat, игры типа Pokémon GO

Установка OpenCV

Первым делом установим библиотеку:

pip install opencv-python

🛠️ 1. Базовые операции с изображениями

Загрузка и сохранение изображения

import cv2
# Загружаем изображение (входные данные - файл 'input.jpg')
# Второй аргумент:
# cv2.IMREAD_COLOR - цветное (по умолчанию)
# cv2.IMREAD_GRAYSCALE - ч/б
# cv2.IMREAD_UNCHANGED - с альфа-каналом
img = cv2.imread('input.jpg', cv2.IMREAD_COLOR)
# Проверяем успешность загрузки
if img is None:
print("Ошибка загрузки изображения!")
else:
# Сохраняем изображение (результат - файл 'output.jpg')
cv2.imwrite('output.jpg', img)
print("Изображение успешно обработано!")

🔄 2. Преобразование цветовых пространств

Что такое цветовые пространства?

Цветовые пространства — это математические модели, которые описывают цвета в виде числовых значений.
OpenCV и другие библиотеки используют разные форматы представления цветов.

Почему OpenCV использует BGR вместо RGB?

  • Историческая причина: В старых камерах использовался порядок BGR (Blue-Green-Red).
  • Совместимость: Многие алгоритмы OpenCV были разработаны под BGR.

Конвертация BGR → RGB → Grayscale

python

import cv2
import matplotlib.pyplot as plt
# Загружаем изображение
img = cv2.imread('input.jpg')
# Конвертируем BGR (OpenCV) в RGB (для matplotlib)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Конвертируем в градации серого
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Отображаем результаты
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(img_rgb)
plt.title("RGB Изображение")
plt.subplot(1, 2, 2)
plt.imshow(img_gray, cmap='gray')
plt.title("Черно-белое изображение")
plt.show()

Применение: Преобразование цветных медицинских снимков в ч/б для анализа тканей.

🌫️ 3. Размытие изображения

🔍 Гауссово размытие: почему оно так называется?

Гауссово размытие (Gaussian Blur) — один из самых популярных методов сглаживания изображений. Его название происходит от функции Гаусса (гауссианы), которая лежит в основе этого фильтра.

📜 История названия

Название связано с именем Карла Фридриха Гаусса (1777–1855) — немецкого математика, который ввёл понятие нормального распределения (кривой Гаусса). Эта функция описывает:

  • Распределение случайных величин в природе (например, рост людей, шумы в изображениях).
  • Как "размазать" информацию с убывающим весом от центра к краям.

Гауссово размытие

import cv2

img = cv2.imread('portrait.jpg')

# Применяем размытие Гаусса
# Параметры:
# (5, 5) - размер ядра размытия (должен быть нечётным)
# 0 - стандартное отклонение по X
blurred = cv2.GaussianBlur(img, (5, 5), 0)

# Сохраняем результат
cv2.imwrite('blurred_portrait.jpg', blurred)

Применение: Используется в системах защиты приватности для размытия номеров автомобилей или лиц.

✂️4. Обрезка и поворот изображения

Выделение области интереса (ROI)

ROI (Region of Interest) — это выделение определенной части изображения для дальнейшей обработки. Это одна из самых часто используемых операций в компьютерном зрении.

import cv2

img = cv2.imread('family_photo.jpg')

# Обрезаем изображение [y:y+h, x:x+w]
# В данном случае выделяем область с 100 по 400 пиксель по высоте
# и с 200 по 500 пиксель по ширине
cropped = img[100:400, 200:500]

# Поворачиваем изображение на 45 градусов
(h, w) = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))

# Сохраняем результаты
cv2.imwrite('cropped.jpg', cropped)
cv2.imwrite('rotated.jpg', rotated)

Применение: Автоматическая обрезка фотографий для паспортов или документов.

🎛 5. Пороговая обработка

Бинаризация изображения

import cv2

# Загружаем изображение в градациях серого
img = cv2.imread('document.jpg', cv2.IMREAD_GRAYSCALE)

# Применяем пороговую обработку
# 127 - пороговое значение
# 255 - максимальное значение
# cv2.THRESH_BINARY - тип порога
_, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)

# Адаптивная пороговая обработка
adaptive = cv2.adaptiveThreshold(img, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2)

cv2.imwrite('binary.jpg', binary)
cv2.imwrite('adaptive.jpg', adaptive)

Применение: Обработка сканированных документов для улучшения читаемости текста.

🖌️ 6. Рисование на изображении

Добавление фигур и текста

import cv2
import numpy as np

# Создаем черное изображение 500x500 пикселей
img = np.zeros((500, 500, 3), dtype="uint8")

# Рисуем синюю линию толщиной 5px
cv2.line(img, (50, 50), (400, 50), (255, 0, 0), 5)

# Рисуем зеленый прямоугольник
cv2.rectangle(img, (50, 100), (400, 200), (0, 255, 0), 3)

# Рисуем красный круг
cv2.circle(img, (225, 350), 100, (0, 0, 255), -1) # -1 означает заливку

# Добавляем текст
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV Demo!', (50, 450),
font, 1, (255, 255, 255), 2, cv2.LINE_AA)

cv2.imwrite('drawing.jpg', img)

Применение: Добавление аннотаций к медицинским снимкам или техническим схемам.

Заключение

OpenCV — это не просто библиотека для программистов. Это:

  • Мощный инструмент для автоматизации работы с изображениями
  • Основа для современных технологий компьютерного зрения
  • Платформа для творчества и инноваций