Эффективные методы обрезки изображений по центру с использованием OpenCV

Обрезка изображения — распространенная задача в компьютерном зрении и обработке изображений. В этой статье блога мы рассмотрим различные методы обрезки изображения по центру с помощью популярной библиотеки OpenCV. Мы предоставим примеры кода для каждого метода и обсудим их преимущества и варианты использования. Итак, приступим!

Методы обрезки по центру в OpenCV:

  1. Метод 1: использование размеров изображения
    Самый простой способ обрезать изображение по центру — вычислить размеры желаемой области обрезки на основе размера изображения. Вот фрагмент кода:
import cv2
def crop_center(image, crop_width, crop_height):
    height, width = image.shape[:2]
    start_x = (width - crop_width) // 2
    start_y = (height - crop_height) // 2
    end_x = start_x + crop_width
    end_y = start_y + crop_height
    cropped_image = image[start_y:end_y, start_x:end_x]
    return cropped_image
# Usage
image = cv2.imread('image.jpg')
cropped_image = crop_center(image, 200, 200)
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
  1. Метод 2. Использование getOptimalDFTSize()
    OpenCV. OpenCV предоставляет функцию под названием getOptimalDFTSize(), которую можно переназначить для обрезки по центру. Он вычисляет оптимальный размер для дискретного преобразования Фурье (ДПФ) на основе размера входного изображения. Вот пример:
import cv2
def crop_center(image, crop_width, crop_height):
    height, width = image.shape[:2]
    start_x = (width - crop_width) // 2
    start_y = (height - crop_height) // 2
    end_x = start_x + crop_width
    end_y = start_y + crop_height
    cropped_image = image[start_y:end_y, start_x:end_x]
    return cropped_image
# Usage
image = cv2.imread('image.jpg')
height, width = image.shape[:2]
optimal_width = cv2.getOptimalDFTSize(width)
optimal_height = cv2.getOptimalDFTSize(height)
cropped_image = crop_center(image, optimal_width, optimal_height)
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
  1. Метод 3: использование срезов Numpy
    Изображения OpenCV можно легко преобразовать в массивы Numpy, что позволяет нам использовать мощные возможности срезов массивов Numpy. Вот пример:
import cv2
import numpy as np
def crop_center(image, crop_width, crop_height):
    height, width = image.shape[:2]
    start_x = (width - crop_width) // 2
    start_y = (height - crop_height) // 2
    end_x = start_x + crop_width
    end_y = start_y + crop_height
    cropped_image = image[start_y:end_y, start_x:end_x]
    return cropped_image
# Usage
image = cv2.imread('image.jpg')
cropped_image = crop_center(np.array(image), 200, 200)
cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)

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