Python OpenCV: Трансформация изображений (Урок 4)

Трансформация изображений в OpenCV

В предыдущем уроке были изучены базовые функции работы с изображениями: изменение формата, добавление эффекта размытия и поиск углов. Эти функции применимы и к видео, поскольку видео представляет собой последовательность кадров. Обработка каждого кадра видео (например, добавление размытия, преобразование в серый формат, поиск углов) оптимизирует видео, облегчая поиск объектов (линий, квадратов, кругов). Например, для черно-белого видео обработка значительно упрощается из-за ограниченного числа цветов (0 и 1).

Отражение изображений

Загрузим изображение up_and_save.jpg из папки imgs с помощью cv2.imread(). Для отражения изображения по горизонтали или вертикали используем функцию cv2.flip(). Параметр функции определяет тип отражения:

  • 0 – отражение по вертикали;
  • 1 – отражение по горизонтали;
  • -1 – отражение по вертикали и горизонтали.

Результат отражения сохраним в той же переменной. Изображение отобразится с помощью cv2.imshow() и cv2.waitKey().

Вращение изображений

Создадим функцию rotate(), принимающую изображение и угол вращения в качестве параметров. Функция определяет высоту и ширину изображения, вычисляет точку вращения (центр изображения) и создает матрицу вращения с помощью cv2.getRotationMatrix2D(). Параметр масштабирования установлен в 1, чтобы избежать изменения размера изображения при вращении. Функция возвращает повернутое изображение, используя cv2.warpAffine(). Функция вызывается, и результат вращения на 90 градусов или -90 градусов отображается с помощью cv2.imshow().

Смещение изображений

Функция transform(), принимает изображение, смещение по оси X и смещение по оси Y в качестве параметров. Она создает матрицу преобразования с помощью np.float32() и использует cv2.warpAffine() для применения смещения. Результат отображается с помощью cv2.imshow().

Поиск контуров изображений

Поиск контуров отличается от поиска краев. При поиске контуров определяются позиции всех контуров, что позволяет работать с этими позициями для идентификации объектов.

Для поиска контуров изображение сначала преобразуется в серый формат с помощью cv2.cvtColor(), затем применяется размытие с помощью cv2.GaussianBlur(). Далее, края изображения обнаруживаются с помощью cv2.Canny(), используя два порога для определения границ цветов.

Функция cv2.findContours() находит контуры. Первый параметр – изображение с обнаруженными краями, второй – режим (cv2.RETR_LIST для получения всех контуров), третий – метод аппроксимации (cv2.CHAIN_APPROX_NONE для получения всех координат контуров). Результатом являются список контуров и иерархия объектов.

Вывод контуров в терминал демонстрирует большой список координат. Для визуализации контуров создается новое изображение с помощью np.zeros_like(), на котором рисуются контуры с помощью cv2.drawContours(). Цвет контуров задается случайным образом. Результат отображается с помощью cv2.imshow().

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

Что будем искать? Например,программа