Обрезка изображения — распространенная задача в компьютерном зрении и обработке изображений. В этой статье блога мы рассмотрим различные методы обрезки изображения по центру с помощью популярной библиотеки OpenCV. Мы предоставим примеры кода для каждого метода и обсудим их преимущества и варианты использования. Итак, приступим!
Методы обрезки по центру в OpenCV:
- Метод 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)
- Метод 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)
- Метод 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. Каждый метод предлагает простой подход для достижения желаемого результата. В зависимости от ваших конкретных требований и характера ваших изображений вы можете выбрать наиболее подходящий метод для вашего проекта. Не забывайте учитывать такие факторы, как производительность, размеры изображения и совместимость с другими методами обработки изображений.