Python 图像处理

Python 图像处理,python,Python,这是一项任务,因为我是python编程新手,所以我付出了很大的努力: 我正在运行下面的函数,该函数以图像和短语(空格将被删除,所以只有文本)作为参数,我已经得到了所有导入和预处理代码,我只需要实现这个函数。我只能使用getpixel、putpixel、load和save。这就是为什么编码对我来说是一项艰巨的任务 def InsertoImage(srcImage, phrase): pix = srcImage.load() for index,value in enum

这是一项任务,因为我是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格式,但参数不是元组”

编辑:


SystemError:new style getargs格式,但参数不是元组实际上,进一步阅读后,我认为问题在于您试图为像素指定字符值。你必须想办法在图像上(以及图像边界内)实际绘制角色

由于您正在使用 对于索引,枚举中的值(短语):


您可以使用value而不是短语[index]

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

srcImage
=从
lolmini.jpg
生成的Python图像库图像
短语
=字符串,
'Hi
'

您试图使
短语
显示为写在
srcImage
顶部的文本。您当前的代码表明,您计划通过访问图像的各个像素并为它们指定一个字母来执行此操作

这不起作用的原因有几个。小二是:

  • 您使用的是单像素。像素是图片元素。它一次只能显示一种颜色。不能用单个像素表示字母。像素只是一个点。你需要将多个像素放在一起,形成一个我们可以识别为字母的连贯形状

  • 您的
    Hi
    文本实际上是什么样子的?当你想象它被写在图像的顶部时,字母是否很薄?它们的大小不同吗?它们又厚又胖吗?斜体字?它们看起来像手写的吗?这些都是字体的属性。目前,您的程序不知道这些字母应该是什么样子。你需要给你的程序一个字体的名称,这样它就知道如何把
    词组
    中的字母画到图像上

Python图像库附带了一个模块,专门用于帮助您绘制字体。相关文档如下:

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

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

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

编辑

只需阅读您对另一个答案的评论,表明您只允许使用
getpixel()
putpixel()
在源图像上绘图。如果确实是这样,那么您的工作负载就会成倍增加

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

然后,你需要为每封你想要支持的信都这样做


如果你能逐字记录作业的内容,我想这将有助于这里的人更好地理解你的所有限制。

我对一般问题的建议是创建一个包含所有字符的图像,在已知坐标(上、下、左、右)然后将角色图像的适当部分传输到新的输出图像中。

请尝试以下操作:
pix[10+索引:15]=字母[值]

使用“”而不是“

哪个语句给出了错误?您可以编辑您的帖子以包含完整的回溯吗?我已经编辑并提供了错误消息。我在阅读答案后发布了更新的代码,但错误显示在if语句中您缺少
if
条件行末尾的冒号,以及所有
elif
行。谢谢,字母,数字,标点符号是字典,可以看到关键元素并打开图像(字体)。但pix[10+索引,15]仍然存在一个问题,因为它给出了错误:pix[10+索引,15]=字母[value]系统错误:新样式的getargs格式,但参数不是元组Hanks我尝试了两者:如果我使用pix[(10+索引,15)],我得到了这个错误:文件“C:\Users\Nave\Desktop\a1\a1\U template.py”,第23行,在DolloImage pix中[(10+索引,15)]=短语[index]系统错误:新样式getargs格式,但如果我使用pix[10+索引][15]参数不是元组,我得到了这个错误:文件“C:\Users\Nave\Desktop\a1\a1_template.py”,第23行,在DolloImage pix[10+索引][15]=短语[index]TypeError:参数必须是长度序列2是的,我很抱歉,当我这么说的时候我并没有认真思考。我用问题所在编辑了我的回答。我希望这能有所帮助,因为这是我的家庭作业:)你能建议我如何画图像上的字符吗,作业只允许我使用
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  
pix[10+index, 15]  = letters[value]