gpt4 book ai didi

python - 图像处理

转载 作者:行者123 更新时间:2023-12-01 06:15:24 30 4
gpt4 key购买 nike

这是一项作业,因为我是Python编程新手,所以我付出了很大的努力:

我正在运行以下函数,它接受图像和短语(空格将被删除,因此只有文本)作为参数,我已经获得了所有导入和预处理代码,我只需要实现这个函数。我只能使用 getpixel、putpixel、load 和 save。这就是为什么编码对我来说是一项艰巨的任务。

def InsertoImage(srcImage, phrase):  
pix = srcImage.load()
for index,value in enumerate(phrase):
pix[10+index,15] = phrase[index]
srcImage.save()
pass

此代码给出“系统错误”,表示“新样式 getargs 格式,但参数不是元组”

编辑:

C:\Users\Nave\Desktop\a1>a1_template.py lolmini.jpg Hi  
Traceback (most recent call last):
File "C:\Users\Nave\Desktop\a1\a1_template.py", line 31, in <module>
doLOLImage(srcImage, phrase)
File "C:\Users\Nave\Desktop\a1\a1_template.py", line 23, in doLOLImage
pix[10+index,15] = phrase[index]
SystemError: new style getargs format but argument is not a tuple

编辑:

好的,谢谢,我理解了,现在发布代码,但我收到 if 语句的错误,不确定为什么 if 语句不起作用,这里是完整的代码,抱歉之前没有完全添加它:

来自 future 进口部门

字母、数字和标点符号是字典映射(大写)

字符到代表该字符的图像

注意:没有存储空格字符!

从 imageproc 导入字母、数字、标点符号、预处理

这是要实现的函数

def InserttoImage(srcImage, 短语):
pix = srcImage.load()
对于索引,枚举值(短语):
如果值是字母:
pix[10+索引, 15] = 字母[值]
elif 的数字值:
pix[10+索引, 15] = 数字[值]
标点符号中的 elif 值: pix[10+索引, 15] = 标点符号[值]
srcImage.save()
通过

当通过命令行调用此脚本时,将执行此代码:

'python.py'

如果名称 == '主要':
srcImage,phrase = preProcess()
InserttoImage(srcImage, 短语)

谢谢,字母、数字和标点符号都是字典,可以查看关键元素并打开图像(字体)。但 pix[10+index, 15] 仍然存在问题,因为它给出了错误:

pix[10+index, 15]  = letters[value]  

系统错误:新样式 getargs 格式,但参数不是元组

最佳答案

您似乎混淆了两个截然不同的概念。根据您发布的示例代码,我们假设:

srcImage = Python 图像库图像,由 lolmini.jpg 生成。
phrase = 字符串,'Hi'。

您正在尝试让 phrase 显示为写在 srcImage 顶部的文本。您当前的代码显示您计划通过访问图像的各个像素并为其分配一个字母来实现此目的。

由于某些原因,这不起作用。主要的两个是:

  • 您正在处理单个像素。像素是一个图片元素。它一次只显示一种颜色。您无法用单个像素表示字母。像素只是一个点。您需要将多个像素组合在一起,才能形成我们识别为字母的连贯形状。

  • 您的Hi 文本实际上是什么样子?当您设想将其写在图像顶部时,字母是否很细?它们的大小不同吗?它们又厚又粗吗?斜体?它们看起来是手写的吗?这些都是字体的属性。目前,您的程序不知道这些字母应该是什么样子。您需要为您的程序提供字体名称,以便它知道如何将 phrase 中的字母绘制到图像上。

Python 图像库附带了一个专门用于帮助您绘制字体的模块。它的文档在这里:
The ImageFont Module

您的代码表明您的总体思路是正确的 - 循环遍历每个字母,将其放置在图像中,并增加 x 值,以便下一个字母不会与它重叠。不过,您需要加载字体并使用上面链接的库中显示的方法将它们绘制到图像上,而不是使用图像的像素。

如果您查看链接文档中的 draw.text() 函数,您会发现实际上可以跳过循环遍历每个字母的需要,而是传递整个字母要在图像上使用的字符串。

我本来可以添加示例代码,但由于这是一项家庭作业,我故意省略了任何代码。借助链接的文档和现有代码,您希望完成此操作不会遇到任何问题。

编辑:

只需阅读您对另一个答案的评论,表明您只能使用 getpixel()putpixel() 在源图像上绘图。如果确实如此,那么你的工作量就成倍增加了。

我上面的评论是正确的——单个像素无法代表一个字母。假设您不允许使用任何外部源代码,您将需要创建包含多个像素位置的数据结构,然后将这些像素全部绘制在特定位置以表示特定字母。

然后,您需要对每封您想要支持的信件执行此操作。

如果您可以逐字包含作业文本,我认为这将有助于这里的人更好地理解您的所有限制。

关于python - 图像处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3553088/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com