【问题标题】:Programming a picture maker template in Python possible?可以用 Python 编写图片制作模板吗?
【发布时间】:2020-09-14 22:15:03
【问题描述】:

我正在寻找一个能够“创建图片”(甚至是视频)的库,具有以下功能:

  • 接受图片输入
  • 调整所述输入的大小以适应给定的模板/方案
  • 在预先设置的图层或坐标中定位图片

一个相当示意性的方法来看待这个: 而红点应该代表例如文字、图片(或可能的视频)元素。

最终目标是为 .py 脚本提供多个输入图片,并由 .py 创建一个如上所述的完成版本。

我尝试的解决方案是研究 Python PIL,但我找不到我要找的东西。

【问题讨论】:

  • 似乎是一个非常独特的案例(但嘿,也许它不是独一无二的......我知道什么)。在我的脑海中,没有任何具有您正在寻找的功能子集的库。我相信您可以使用枕头和 opencv 创建自己的实用程序库。
  • 哦 - 这让我吃惊,我以为我不会是第一个询问如何在空白画布上创建图片(或如何重新调整大小和重新定位)输入图像的“白痴” ,所以基本上是在修改图片。无论如何,你能指导我理解“通过使用枕头和opencv制作[我的]自己的实用程序库”的确切含义吗?

标签: python image templates video layout


【解决方案1】:

是的,可以用 Python 做到这一点。

您要查找的库是 OpenCV([https://opencv.org][1]/)。
一些基本的 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()

【讨论】:

  • 介意详细说明吗?如何在 OpenCV 中完成我描述的功能?
  • 我想你应该稍微修改一下问题(这将帮助人们更好地回答你的问题。我明白你现在需要什么。给我几分钟,我会编辑我的答案。
  • @the23Effect 绝对符合我的想法。提到他将根据他理解的内容编辑他的答案。虽然我仍然不是 100% 清楚您的要求。你的想法很有趣,需要解释更多。 (1) 在上面的示例中,您提供了图片放置位置的示意图。您是否希望为您的 python 脚本/模板提供类似的原理图文件。 (2)在向脚本提供原理图文件后,您是否希望脚本解析它并提取位置数据,其中 A(左上框坐标),B(右上框坐标)
  • C(右下角坐标)。 (3)然后你打算给你的脚本一些图片[P1,P2,P3]并告诉它把P1放在A里面,P2放在B里面,P3放在C里面。脚本会自动把这些图片放在那些区域并注意调整大小
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 2011-08-11
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多