模糊图片(Python、Jython、图片编辑)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2292233/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-04 00:17:13  来源:igfitidea点击:

Blurring a picture (Python, Jython, picture editing)

pythonimage-manipulationjython

提问by roger34

Trying to blur a picture in Jython. What I have does run but does not return a blurred picture. I'm kinda at a loss of what is wrong with it.

试图在 Jython 中模糊图片。我所拥有的确实可以运行,但不会返回模糊的图片。我有点不知所措。

FINAL (WORKING) CODE EDITED IN BELOW. THANKS FOR HELP GUYS!

最终(工作)代码在下面编辑。感谢您的帮助!

def main():

定义主():

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

def 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

The pseudo-code was as such : makeBlurredPicture(picture, blur_amount) get width and height of picture and make an empty picture with the dimensions (w-blur_amount, h ) call this blurPic

伪代码是这样的: makeBlurredPicture(picture, blur_amount) 获取图片的宽度和高度,并制作一个尺寸为 (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

回答by Turismo

The problem is that you are overwriting the variable pxfrom the outer loop which is the pixel in the blurred image with a pixel value from the original image.
So just replace your inner loop with:

问题是您正在用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)

In order to show the blurred picture change the last line in you mainto

为了显示模糊的图片,请将您的最后一行更改main

show( makeBlurredPicture(pic,blurAmount) )

回答by Todd Moses

Here is the simple way to do it:

这是执行此操作的简单方法:

import ImageFilter

def filterBlur(im):

    im1 = im.filter(ImageFilter.BLUR)

    im1.save("BLUR" + ext)

filterBlur(im1)

For a complete reference to the Image Library See: http://www.riisen.dk/dop/pil.html

有关图像库的完整参考,请参见:http: //www.riisen.dk/dop/pil.html

回答by carson

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