OpenCVJuniorTechnical
Что такое OpenCV и каковы его основные области применения?
OpenCV — библиотека компьютерного зрения с более чем 2500 алгоритмами для обработки изображений, видео, детекции объектов, калибровки камер и интеграции с DNN-моделями.
Что такое OpenCV
OpenCV (Open Source Computer Vision Library) — это библиотека компьютерного зрения с открытым исходным кодом, написанная на C++ с привязками для Python, Java и других языков. Библиотека содержит более 2500 оптимизированных алгоритмов обработки изображений и машинного зрения. Разработана при поддержке Intel, сейчас поддерживается сообществом и компанией OpenCV.org. Версия 4.x — актуальная стабильная линейка.
Основные области применения
- Обнаружение и распознавание объектов — Haar cascades, HOG+SVM, интеграция с DNN-моделями (YOLO, MobileNet).
- Обработка видеопотоков — захват кадров с камеры или файла, фильтрация, трекинг объектов.
- Морфологические операции — эрозия, дилатация, открытие/закрытие для бинарных масок.
- Калибровка камер — устранение дисторсии, стереозрение, оценка позы.
- Оптический поток — анализ движения между кадрами (Lucas-Kanade, Farneback).
- Сегментация — GrabCut, watershed, пороговая бинаризация.
- Распознавание лиц и жестов — обнаружение ключевых точек, landmark detection.
- Медицинская визуализация — анализ рентгеновских снимков, МРТ.
- Промышленный контроль качества — поиск дефектов на конвейере.
- Дополненная реальность — наложение 3D-объектов с помощью solvePnP.
Базовый пример: чтение изображения и детекция краёв
import cv2
import numpy as np
# Загрузка изображения
image = cv2.imread("photo.jpg")
if image is None:
raise FileNotFoundError("Изображение не найдено")
# Перевод в оттенки серого
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Размытие для снижения шума
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# Детекция краёв алгоритмом Canny
edges = cv2.Canny(blurred, threshold1=50, threshold2=150)
# Нахождение контуров
contours, hierarchy = cv2.findContours(
edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE
)
print(f"Найдено контуров: {len(contours)}")
# Отрисовка контуров на исходном изображении
result = image.copy()
cv2.drawContours(result, contours, -1, (0, 255, 0), 2)
cv2.imwrite("result.jpg", result)
Пример: захват видео с камеры
import cv2
cap = cv2.VideoCapture(0) # 0 — первая веб-камера
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 30)
while True:
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow("Camera", gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Установка
# Базовая версия
pip install opencv-python
# Полная версия с дополнительными модулями (contrib)
pip install opencv-contrib-python
# Для headless-серверов без GUI
pip install opencv-python-headless
Подводные камни
- BGR вместо RGB — OpenCV хранит изображения в формате BGR, а не RGB. При передаче в matplotlib или PIL нужно делать cv2.cvtColor(img, cv2.COLOR_BGR2RGB).
- Тип данных uint8 — большинство операций ожидают uint8 (0–255). Арифметика может дать переполнение; используйте cv2.add() вместо numpy +.
- imread возвращает None без исключения — если файл не найден, функция возвращает None, а не бросает ошибку. Всегда проверяйте результат.
- Конфликт пакетов — нельзя одновременно устанавливать opencv-python и opencv-contrib-python; они конфликтуют.
- Утечка памяти при cap.release() — если не вызвать release() при завершении, захват остаётся открытым и следующий запуск может не получить доступ к камере.
- Не thread-safe VideoCapture — чтение кадров из нескольких потоков без блокировки приводит к race condition; используйте отдельный поток с очередью.
- GaussianBlur требует нечётный размер ядра — передача чётного числа (4, 6 и т.д.) вызывает ошибку времени выполнения.
Common mistakes
- Объяснять
opencv applicationsтолько синтаксисом без shape, dtype, состояния или режима выполнения. - Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
- Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.
What the interviewer is testing
- Может ли связать
opencv applicationsс реальным контрактом входов и выходов. - Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
- Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.