Возможно ли программирование шаблона создателя изображений в формате Python? - PullRequest
0 голосов
/ 27 мая 2020

Я ищу библиотеку, которая позволяет «создавать изображения» (или даже видео) со следующими функциями:

  • Принятие входных изображений
  • Изменение размера указанных входов для соответствия данный шаблон / схема
  • Размещение изображений в предварительно установленных слоях или координатах

Довольно схематичный c подход, чтобы посмотреть на это: schematic approach picture в то время как красные точки должны представлять, например, элементы текста, изображения (или, если возможно, видео).

Конечная цель - дать скрипту .py несколько входных изображений, а .py создать законченную версию, например упомянуто выше.

Решения, которые я пробовал, искали Python PIL, но я не смог найти то, что искал.

1 Ответ

1 голос
/ 27 мая 2020

Да, это можно сделать с помощью Python.

Библиотека, которую вы ищете, - OpenCV ([https://opencv.org] [1] / ).
Некоторые основные c OpenCV python руководства (https://docs.opencv.org/master/d9/df8/tutorial_root.html).

1) Вы можете использовать функцию imread () для чтения изображений из файлов.
2) Вы можете использовать функцию resize () для изменения размера изображений.
3) Вы можете создать пустой основной массив numpy, соответствующий размеру и глубине (глубине цвета) черного прямоугольника на вашем рисунке. показано, измените размер изображения и скопируйте содержимое в пустой массив, начиная с нужной позиции.

Ниже приведен пример кода, который делает что-то близкое к тому, что вам может понадобиться, вы можете изменить его в соответствии с вашими фактическими потребностями . (Поскольку ваши требования не ясны, я написал такой код, чтобы он мог, по крайней мере, направлять вас.)

import numpy as np
import cv2
import matplotlib.pyplot as plt

# You can store most of these values in another file and load them.
# You can modify this to set the dimensions of the background image.
BG_IMAGE_WIDTH = 100
BG_IMAGE_HEIGHT = 100
BG_IMAGE_COLOR_DEPTH = 3

# This will act as the black bounding box you have shown in your figure.
# You can also load another image instead of creating empty background image.
empty_background_image = np.zeros(
    (BG_IMAGE_HEIGHT, BG_IMAGE_WIDTH, BG_IMAGE_COLOR_DEPTH),
    dtype=np.int
)

# Loading an image.
# This will be copied later into one of those red boxes you have shown.
IMAGE_PATH = "./image1.jpg"
foreground_image = cv2.imread(IMAGE_PATH)

# Setting the resize target and top left position with respect to bg image.
X_POS = 4
Y_POS = 10
RESIZE_TARGET_WIDTH = 30
RESIZE_TARGET_HEIGHT = 30

# Resizing
foreground_image= cv2.resize(
    src=foreground_image,
    dsize=(RESIZE_TARGET_WIDTH, RESIZE_TARGET_HEIGHT),
)

# Copying this into background image
empty_background_image[
    Y_POS: Y_POS + RESIZE_TARGET_HEIGHT,
    X_POS: X_POS + RESIZE_TARGET_WIDTH
] = foreground_image

plt.imshow(empty_background_image)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...