模糊图片(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
Blurring a picture (Python, Jython, picture editing)
提问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 px
from 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 main
to
为了显示模糊的图片,请将您的最后一行更改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