Трансформация изображений в 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().
В этом уроке были изучены функции трансформации изображений, включая отражение, вращение и смещение, а также поиск контуров и их использование для создания новых изображений.