2010-02-18 8 views
0

자이 썬에서 그림을 흐리게하려고합니다. 내가 가지고있는 것은 실행되지만 흐린 그림은 반환하지 않습니다. 나는 그것과 함께 무엇이 잘못 되었는가를 놓치고있다.그림 흐리게하기 (파이썬, 자이 썬, 그림 편집)

최종 (working) 아래에서 수정 된 코드입니다. 도움을 주신 분께 감사드립니다!

pic= makePicture(pickAFile()) 
show(pic) 
blurAmount=10 
makeBlurredPicture(pic,blurAmount) 
show(makeBlurredPicture(pic,blurAmount)) 

DEF makeBlurredPicture (PIC, blurAmount) :

DEF() 메인

w=getWidth(pic) 
h=getHeight(pic) 
blurPic= makeEmptyPicture(w-blurAmount, h) 
for px in getPixels(blurPic): 
    x=getX(px) 
    y=getY(px) 
    if (x+blurAmount<w): 
    rTotal=0 
    gTotal=0 
    bTotal=0 
    for i in range(0,blurAmount): 
     origpx=getPixel(pic,x+i,y) 
     rTotal=rTotal+getRed(origpx) 
     gTotal=gTotal+getGreen(origpx) 
     bTotal=bTotal+getBlue(origpx) 
    rAverage=(rTotal/blurAmount) 
    gAverage=(gTotal/blurAmount) 
    bAverage=(bTotal/blurAmount) 

    setRed(px,rAverage) 
    setGreen(px,gAverage) 
    setBlue(px,bAverage) 
return blurPic 
의사 코드 등이었다

: GET 폭 makeBlurredPicture (그림 blur_amount) 및 그림의 높이와 빈 그림을 (w-blur_amount, h)이 blurPic이라고 부름

라이브러리 참조 이미지에 대한 완전한 설명

import ImageFilter 

def filterBlur(im): 

    im1 = im.filter(ImageFilter.BLUR) 

    im1.save("BLUR" + ext) 

filterBlur(im1) 

: 여기

+0

의 마지막 줄을 변경 표시하기 위해

for i in range(0,blurAmount): origPx=getPixel(pic,x+i,y) rTotal=rTotal+getRed(origPx) gTotal=gTotal+getGreen(origPx) bTotal=bTotal+getBlue(origPx) 

:
그래서 단지로 내부 루프를 교체() 원래 사진에 아니라 흐린 하나? –

+0

나는 반환이 그것을 나타낼 것이라고 생각했다. :/어떻게 제대로 표시합니까? main() 함수의 끝 부분에 show (blurPic)를 넣으려고했으나 작동하지 않습니다. – roger34

+0

짐작할 수 있습니다. 나는 당신의 부서를 의심합니다 :'rTotal/blurAmount'. rTotal 및 blurAmount 정수가 모두 있습니까? 그렇다면, 실수 나누기, 부동 소수점 결과가 필요할 때 잘린 구분 (정수 결과)을 수행하고있는 것입니다. 편집 : 아니, 스크랩. 정수 부분은 여기 괜찮아 보입니다. –

답변

3

문제는 당신이 외부 루프에서 변수 px를 덮어 쓰는 것을 인 원래 이미지의 픽셀 값이있는 흐린 이미지의 픽셀입니다. 흐리게 그림은 당신이 쇼를 호출하고 있기 때문에 될 수 있을까요 당신 main

show(makeBlurredPicture(pic,blurAmount)) 
+0

고마워요! 이것은 그 것이다. 메인 포스트에서 편집 된 수정 된 코드. Upvoted, Checked 등 – roger34

1

는 간단하게 할 수있는 방법입니다 http://www.riisen.dk/dop/pil.html

+0

나는 그것이 쉽다는 것을 바란다. 그러나 나는 학생이고, 교수는 그것을 길게하고 싶어한다. – roger34

0
def blur_image(image, radius): 
    blur = image.filter(ImageFilter.GaussianBlur(radius)) 
    image.paste(blur,(0,0)) 
    return image 
+1

StackOverflow에 오신 것을 환영합니다! 대답은 항상 높이 평가되지만,이 질문은 6 년 전에 요청되었으며 이미 받아 들여진 해결책이 있습니다. 질문이 아직 해결되지 않은 것으로 표시되거나 문제에 대한 대안으로 극적으로 더 나은 대안을 찾지 못한 경우, 답변을 제공하여 '부딪히는'질문을 맨 위로 피하십시오. –