2014-10-08 3 views
-1

내 의도하는 것입니다 :python에서 이미지를 번역하는 방법 PIL? 아래 그림과 같이

http://postimg.org/image/pdb6urf1d/

내 기능 :이 오류가 나타납니다

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 

프로세스가 종료 코드 완료 한

답변

0

x에서 반복됩니다. 와 y하지만 각 반복 내에서이를 변경 : 범위에서 y를위한

(0, 높이) :

for x in range(0, width): 

    xy = (x, y)  
    red, green, blue = destino.getpixel(xy)  
    x += x_loc #this changes the value of x 
    y += y_loc #this changes the value of y 

    #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)) 

당신이 반복 시도 할 수 :

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)) 

이 BTW 범위 (0, a)는 수 범위 (a)로 작성하십시오

또한이 두 명령은 임의로 할당하지 않기 때문에 아무 것도하지 않습니다 :

imagem1.convert("RGB") 
destino.convert("RGB") 
+0

좋은 지적이지만 오류 메시지의 출처는 아닙니다. –

+0

문제는 x와 y가 변환되고 번역이 이미지 바깥에 떨어진다는 것입니다. – carlosdc

0

동료가 문제를 해결했습니다. 아래 해결책 :

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") 
관련 문제