2014-01-07 1 views
0

사진을 축소하고 싶습니다. 따라서이 코드를 작성했습니다 :파이썬으로 이미지를 처리하는 중 - 잘 작동하지 않는다고 생각합니다.

def scaling_down(ima, value): 
###~Scaling down the image by a value~### 
value = int(value) 
width, height = ima.size 
mat_m = ima.load() 
width2 = (int(width) + 1)/value 
height2 = (int(height)+1)/value 
out1 = Image.new('L',(width2,height2)) 
out_the_pix = out1.load() 
for x in range(0,width,value): 
    for y in range(0,height,value): 
     out_the_pix[x/value,y/value] = mat_m[x,y] 
return out1 

값은 이미지 크기를 조절할 정도입니다. 그러나 2보다 큰 값을 선택하면 오류가 발생합니다. 오류를받지 않으려면 값 2를 선택해야합니다. 왜 찾을 수있게 도와 주실 수 있습니까?

+1

(3) "오류"정의 = 값 여기서, 표시합니다. –

+0

이 PIL입니까? 질문에 들여 쓰기를 수정해야합니다. – moooeeeep

+0

DRY, scikit-image에는이 기능이 있습니다. http://scikit-image.org/docs/dev/api/skimage.transform.html?highlight=hough#skimage.transform.downscale_local_mean – M4rtini

답변

0

out1이 더 커야합니다.

from math import ceil 
width2 = int(ceil(1.0*width/value)) 
height2 = int(ceil(1.0*height/value)) 

이 값은 적어도 3 \ 4 \ 5 이상으로 작동하는 것으로 보입니다. 원래이 실패한 이유

일부 코드는

>>>x = range(10) 
>>>width = len(x) 
>>>width 
10 
>>>width2 = (width + 1)/3 
>>>width2 
3 
>>>for x in range(0,width, 3): 
    .....:  print x/3 
    .....: 
0 
1 
2 
3 <-- this would give the index error. Last index would be 2. 

>>>widthLonger = (width + width%3 + 1)/3 
>>>widthLonger 
4 
+0

, 감사합니다. 이 오류가 있습니다 : out_the_pix [x/값, y/값] = mat_m [x, y] IndexError : 이미지 인덱스가 범위를 벗어났습니다. 왜? 문제는 무엇 이었습니까? – user3160249

+0

루프의 끝에서 x/value와 \ 또는 y/value는 out1의 크기보다 큰 값으로 끝납니다. – M4rtini

+0

그러나 2보다 작습니까? – user3160249

관련 문제