Как удалить черные границы с изображений с помощью Python

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

  1. OpenCV:
    Вы можете использовать библиотеку OpenCV, чтобы обрезать черные границы. Вот пример фрагмента кода:

    import cv2
    def remove_black_borders(image_path):
       image = cv2.imread(image_path)
       gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
       _, thresh = cv2.threshold(gray, 1, 255, cv2.THRESH_BINARY)
       contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
       x, y, w, h = cv2.boundingRect(contours[0])
       cropped_image = image[y:y + h, x:x + w]
       return cropped_image
    # Usage example
    cropped_image = remove_black_borders("image.jpg")
    cv2.imshow("Cropped Image", cropped_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  2. PIL (библиотека изображений Python):
    Библиотека PIL предоставляет различные функции манипулирования изображениями. Вот пример использования PIL:

    from PIL import Image
    def remove_black_borders(image_path):
       image = Image.open(image_path)
       image_data = image.getdata()
       image_without_borders = image.crop(image.getbbox())
       return image_without_borders
    # Usage example
    cropped_image = remove_black_borders("image.jpg")
    cropped_image.show()
  3. NumPy:
    NumPy — мощная библиотека для числовых вычислений, включая обработку изображений. Вот пример использования NumPy:

    import numpy as np
    from PIL import Image
    def remove_black_borders(image_path):
       image = Image.open(image_path)
       image_data = np.array(image)
       non_black_pixels = np.where(image_data.min(axis=2) != 0)
       bbox = np.min(non_black_pixels[0]), np.min(non_black_pixels[1]), np.max(non_black_pixels[0]), np.max(
           non_black_pixels[1])
       cropped_image = image.crop(bbox)
       return cropped_image
    # Usage example
    cropped_image = remove_black_borders("image.jpg")
    cropped_image.show()