2010-02-18 88 views
0

試圖模糊Jython中的圖片。我有的運行,但不會返回模糊的圖片。我有點不知所措。模糊圖片(Python,Jython,圖片編輯)

最終(工作)代碼編輯在下面。感謝幫助的人!

DEF主():

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

DEF makeBlurredPicture(PIC,blurAmount):

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 

的僞代碼是這樣:makeBlurredPicture(圖片,blur_amount) GET寬度和圖片的高度並製作一個尺寸爲 (w-blur_amount,h)的空圖片稱爲blurPic

for loop, looping through all the pixels (in blurPic) 
    get and save x and y locations of the pixel 
    #make sure you are not too close to edge (x+blur) is less than width 
      Intialize rTotal, gTotal, and bTotal to 0 
      # add up the rgb values for all the pixels in the blur 
      For loop that loops (blur_amount) times 
        rTotal= rTotal +the red pixel amount of the picture (input argument)    at the location (x+loop number,y)  then same for green and blue 
      find the average of red,green, blue values, this is just rTotal/blur_amount (same for green, and blue) 
      set the red value of blurPic pixel to the redAverage (same for green and blue) 
return blurPic 
+0

可能是因爲你調用秀()在原始圖片上,而不是模糊的? –

+0

我想返回會顯示它。 :/如何正確顯示它?我嘗試在main()函數的末尾放置show(blurPic),但這不起作用。 – roger34

+0

只是猜測:我懷疑你的部門:'rTotal/blurAmount'。既是rTotal又是blurAmount整數?如果是這樣,你可能需要一個截斷除法(整數結果),當你可能想要一個真正的除法,與浮點結果。編輯:不,廢話。整數除法在這裏看起來很好。 –

回答

3

的問題是,你是從外循環覆蓋變量px這是模糊圖像中具有來自原始圖像的像素值的像素。
所以只是代替你的內部循環:

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

爲了顯示模糊畫面更改的最後一行在你main

show(makeBlurredPicture(pic,blurAmount)) 
+0

非常感謝!就是這樣。在主帖子中修改了正確的代碼。 Upvoted,Checked等 – roger34

1

下面是簡單的方法來做到這一點:

import ImageFilter 

def filterBlur(im): 

    im1 = im.filter(ImageFilter.BLUR) 

    im1.save("BLUR" + ext) 

filterBlur(im1) 

對於一個完整的參考圖片庫見: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年前就已經提出,並且已經有了一個可以接受的解決方案請儘量避免通過向他們提供答案來'碰撞'問題,除非問題還沒有被標記爲已解決,或者您找到了一個更好的替代方法來解決問題:) –