Рубрики

Обработка изображений в Python (масштабирование, вращение, сдвиг и обнаружение краев)

Фотографирование — это всего лишь один щелчок мыши, поэтому для того, чтобы поиграть с ним, нужно больше, чем несколько строк кода. Кажется, не в случае с питоном. В Python доступно довольно много хороших библиотек для обработки изображений, таких как open-cv, Pillow и т. Д. В этой статье мы будем использовать Open CV , библиотеку с открытым исходным кодом для компьютерного зрения. Имеются интерфейсы C ++, Python и Java. Он очень оптимизирован (написан на C / C ++) для приложений реального времени в области компьютерного зрения.

Давайте начнем с простого, т.е. масштабирования изображения.

Масштабирование изображения : —

Операция масштабирования увеличивает / уменьшает размер изображения.

import cv2

import numpy as np

  

FILE_NAME = 'volleyball.jpg'

try:

    # Читать изображение с диска.

    img = cv2.imread(FILE_NAME)

  

    # Получить количество пикселей по горизонтали и вертикали.

    (height, width) = img.shape[:2]

  

    # Укажите размер изображения вместе с методами интерполяции.

    # cv2.INTER_AREA используется для сжатия, тогда как cv2.INTER_CUBIC

    # используется для масштабирования.

    res = cv2.resize(img, (int(width / 2), int(height / 2)), interpolation = cv2.INTER_CUBIC)

  

    # Записать изображение обратно на диск.

    cv2.imwrite('result.jpg', res)

  

except IOError:

    print ('Error while reading files !!!')

Выход:

Поворот изображения: —
Изображения можно вращать в любой степени по часовой стрелке или иным образом. Нам просто нужно определить матрицу поворота, указав точку поворота, степень поворота и коэффициент масштабирования.

import cv2

import numpy as np

  

FILE_NAME = 'volleyball.jpg'

try:

    # Чтение изображения с диска.

    img = cv2.imread(FILE_NAME)

  

    # Форма изображения в пикселях.

    (rows, cols) = img.shape[:2]

  

    # getRotationMatrix2D создает матрицу, необходимую для преобразования.

    # Нам нужна матрица для поворота относительно центра на 45 градусов без масштабирования.

    M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 1)

    res = cv2.warpAffine(img, M, (cols, rows))

  

    # Записать изображение обратно на диск.

    cv2.imwrite('result.jpg', res)

except IOError:

    print ('Error while reading files !!!')

Выход:

Перевод изображения: —
Переводить изображение означает сдвигать его в пределах заданной системы отсчета.

import cv2

import numpy as np

  

FILE_NAME = 'volleyball.jpg'

# Создать матрицу перевода.
# Если сдвиг (х, у), то матрица будет
# M = [1 0 x]
# [0 1 год]
# Давайте сместимся на (100, 50).

M = np.float32([[1, 0, 100], [0, 1, 50]])

  

try:

  

    # Читать изображение с диска.

    img = cv2.imread(FILE_NAME)

    (rows, cols) = img.shape[:2]

  

    # warpAffine делает соответствующее смещение с учетом

    # матрица перевода.

    res = cv2.warpAffine(img, M, (cols, rows))

  

    # Записать изображение обратно на диск.

    cv2.imwrite('result.jpg', res)

  

except IOError:

    print ('Error while reading files !!!')

Выход:

Обнаружение края в изображении: —
Процесс обнаружения изображения включает в себя обнаружение острых краев на изображении. Такое обнаружение краев важно в контексте распознавания изображений или локализации / обнаружения объектов . Есть несколько алгоритмов для обнаружения краев из-за его широкой применимости. Мы будем использовать один такой алгоритм, известный как Canny Edge Detection .

import cv2

import numpy as np

  

FILE_NAME = 'volleyball.jpg'

try:

    # Читать изображение с диска.

    img = cv2.imread(FILE_NAME)

  

    Обнаружение хитрых краев.

    edges = cv2.Canny(img, 100, 200)

  

    # Записать изображение обратно на диск.

    cv2.imwrite('result.jpg', edges)

except IOError:

    print ('Error while reading files !!!')

Выход:

Пожалуйста, обратитесь Github для более подробной информации.

Рекомендуемые посты:

Обработка изображений в Python (масштабирование, вращение, сдвиг и обнаружение краев)

0.00 (0%) 0 votes