如何在python PIL中翻译图像?
我的意图如下所示: 我的职能:如何在python PIL中翻译图像?,python,windows,image-processing,pillow,Python,Windows,Image Processing,Pillow,我的意图如下所示: 我的职能: def translacao(imagem1): imagem1.save("translate.png") destino = Image.open("translate.png") destino = destino.resize((400,400)) #Tamanho Imagem - Largura e Altura width = destino.size[0] height = destino.size[1] x_loc
def translacao(imagem1):
imagem1.save("translate.png")
destino = Image.open("translate.png")
destino = destino.resize((400,400))
#Tamanho Imagem - Largura e Altura
width = destino.size[0]
height = destino.size[1]
x_loc = 20
y_loc = 20
x_loc = int(x_loc)
y_loc = int(y_loc)
imagem1.convert("RGB")
destino.convert("RGB")
for y in range(0, height):
for x in range(0, width):
xy = (x, y)
red, green, blue = destino.getpixel(xy)
x += x_loc
y += y_loc
destino.putpixel((x, y), (red, green, blue))
return destino.save("translate.png")
出现以下错误:
C:\Python27\python.exe C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py
Traceback (most recent call last):
File "C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py", line 289, in <module>
translacao(imagem1)
File "C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py", line 262, in translacao destino.putpixel((x, y), (red, green, blue))
File "C:\Python27\lib\site-packages\PIL\Image.py", line 1269, in putpixel
return self.im.putpixel(xy, value)
IndexError: image index out of range
C:\Python27\python.exe C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py
回溯(最近一次呼叫最后一次):
文件“C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py”,第289行,在
translacao(图像M1)
文件“C:/Users/Mikhail/PycharmProjects/SistMult/histograma.py”,第262行,以translacao destino.putpixel((x,y)、(红、绿、蓝))表示
文件“C:\Python27\lib\site packages\PIL\Image.py”,第1269行,单位为putpixel
返回self.im.putpixel(xy,值)
索引器:图像索引超出范围
进程结束,退出代码为1您正在x和y上迭代,但在每次迭代中都会更改它: 对于范围(0,高度)内的y: 您可以尝试迭代:
for y in range(0,height-yloc):
for x in range(0,height-xloc):
xy = (x, y)
red, green, blue = destino.getpixel(xy)
x += x_loc
y += y_loc
#at this point x can be outside of 0..height-1 and y can be outside of 0..width-1
destino.putpixel((x, y), (red, green, blue))
顺便说一句,范围(0,a)可以写为范围(a)
此外,这两个命令没有任何作用,因为您没有将其指定给任何变量:
imagem1.convert("RGB")
destino.convert("RGB")
我的同事设法解决了这个问题。解决方案如下:
destino = Image.open("foto.png")
#Tamanho Imagem - Largura e Altura
lar = destino.size[0]
alt = destino.size[1]
x_loc = 200
y_loc = 200
imagem_original = np.asarray(destino.convert('RGB'))
for x in range(lar):
for y in range(alt):
if x >= x_loc and y >= y_loc:
yo = x - x_loc
xo = y - y_loc
destino.putpixel((x,y), (imagem_original[xo,yo][0],imagem_original[xo,yo][1],imagem_original[xo,yo][2]))
else:
destino.putpixel((x,y), (255, 255, 255, 255))
destino.save("translate.png")
问题是,x和y正在被翻译,翻译后不在图像范围内。
destino = Image.open("foto.png")
#Tamanho Imagem - Largura e Altura
lar = destino.size[0]
alt = destino.size[1]
x_loc = 200
y_loc = 200
imagem_original = np.asarray(destino.convert('RGB'))
for x in range(lar):
for y in range(alt):
if x >= x_loc and y >= y_loc:
yo = x - x_loc
xo = y - y_loc
destino.putpixel((x,y), (imagem_original[xo,yo][0],imagem_original[xo,yo][1],imagem_original[xo,yo][2]))
else:
destino.putpixel((x,y), (255, 255, 255, 255))
destino.save("translate.png")