Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单的;模糊的;在python中表示图像的数组的_Python_Image Processing_Numpy_Python Imaging Library_Python 2.7 - Fatal编程技术网

简单的;模糊的;在python中表示图像的数组的

简单的;模糊的;在python中表示图像的数组的,python,image-processing,numpy,python-imaging-library,python-2.7,Python,Image Processing,Numpy,Python Imaging Library,Python 2.7,我有一个图像,它由两个任意放置的黑色1px“斑点”组成,在一张100像素x 200像素的白色画布上。我正试图“通过将一些相邻像素(每个像素的半径为10px)变黑来模糊这些斑点。我已经编写了以下代码,但不太确定下一步是什么 import numpy as np from PIL import Image from scipy import ndimage from matplotlib import pyplot from matplotlib import cm from scipy.misc

我有一个图像,它由两个任意放置的黑色1px“斑点”组成,在一张100像素x 200像素的白色画布上。我正试图“通过将一些相邻像素(每个像素的半径为10px)变黑来模糊这些斑点。我已经编写了以下代码,但不太确定下一步是什么

import numpy as np
from PIL import Image 
from scipy import ndimage
from matplotlib import pyplot
from matplotlib import cm
from scipy.misc import imsave

im = Image.open("test.png")
pix = np.asarray(im)
new_pix = np.copy(pix[:,:,0]) # need this otherwise can't write to the pix array.
pix_to_enlarge = np.where(new_pix != 255)
pixels_to_enlarge_by = 10
i=0
for each_pixel in pix_to_enlarge[0]: # this cycles through each non-white pixel
    for y in range(len(new_pix)): # this looks across the length (down) the page
        for x in new_pix[y]: # this looks across the x-axis for each y step
            radius = pixels_to_enlarge_by**2

因此,基本上我已经找到了可变像素中非白色像素的位置。我正在尝试(到目前为止没有做到)选择周围的像素(在10px内)你有什么想法吗?

你需要看看每一个像素,然后计算出你想把多少内容分发给图片中的每一个像素,例如通过比较两个像素之间的距离

以下是numpy的实现方法。如果您想手动完成,那么这在任何情况下都可以作为一个起点。它被称为卷积。

关于高斯模糊,这里有一个很好的起点:

但是如果你只是想做一个开/关模糊效果,那么卷积函数(卷积核)只是关于源点和任何可能的相邻像素之间距离的if语句。确实有针对这种情况的优化:您的循环将不需要跨越所有像素的所有像素,只需要足够使大小为R的圆适合所考虑的范围

既然你想要第一原理,就在这里。它只适用于rgb黑白

from PIL import Image 

im = Image.open("cat2.png")
px=im.load()
im2 = im.copy()
px2=im2.load()
sx,sy=im.size
def turnpixel(Nix,Niy):
    for ix in range(sx):
        for iy in range(sy):
            r2=(Nix-ix)**2+(Niy-iy)**2
            if r2<5:
                if sum(px[ix,iy])>100: # rgb sum>100 is considered ON.
                    px2[Nix,Niy]=(255,255,255)                            
                    return
                    # we turned a pixel on, so we are done with it.

for Nix in range(sx):
    for Niy in range(sy):
        px2[Nix,Niy]=(0,0,0)
        turnpixel(Nix,Niy)

im.show()
im2.show()
很明显,如果你这样做的话,你应该在浮点上操作,而不是整数。并使用numpy或一些图像处理模块

高斯模糊是(在上面的函数中)。现在整数是一个非常糟糕的主意顺便说一句:

        inv2sigma2=1.0/(2*3)
        r2=(Nix-ix)**2+(Niy-iy)**2
        fact=inv2sigma2/(math.pi)*math.exp(-r2*inv2sigma2)
        def convfunc(o,v):
            return o+int(v*fact)

在某种程度上,你需要查看每个像素,然后计算出你想要在图片中向每个像素分发多少内容,例如通过比较两个像素之间的距离

以下是numpy的实现方法。如果您想手动完成,那么这在任何情况下都可以作为一个起点。它被称为卷积。

关于高斯模糊,这里有一个很好的起点:

但是如果你只是想做一个开/关模糊效果,那么卷积函数(卷积核)只是关于源点和任何可能的相邻像素之间距离的if语句。确实有针对这种情况的优化:您的循环将不需要跨越所有像素的所有像素,只需要足够使大小为R的圆适合所考虑的范围

既然你想要第一原理,就在这里。它只适用于rgb黑白

from PIL import Image 

im = Image.open("cat2.png")
px=im.load()
im2 = im.copy()
px2=im2.load()
sx,sy=im.size
def turnpixel(Nix,Niy):
    for ix in range(sx):
        for iy in range(sy):
            r2=(Nix-ix)**2+(Niy-iy)**2
            if r2<5:
                if sum(px[ix,iy])>100: # rgb sum>100 is considered ON.
                    px2[Nix,Niy]=(255,255,255)                            
                    return
                    # we turned a pixel on, so we are done with it.

for Nix in range(sx):
    for Niy in range(sy):
        px2[Nix,Niy]=(0,0,0)
        turnpixel(Nix,Niy)

im.show()
im2.show()
很明显,如果你这样做的话,你应该在浮点上操作,而不是整数。并使用numpy或一些图像处理模块

高斯模糊是(在上面的函数中)。现在整数是一个非常糟糕的主意顺便说一句:

        inv2sigma2=1.0/(2*3)
        r2=(Nix-ix)**2+(Niy-iy)**2
        fact=inv2sigma2/(math.pi)*math.exp(-r2*inv2sigma2)
        def convfunc(o,v):
            return o+int(v*fact)

标准方法是使用a。如果你想要全部黑白,你需要在做卷积后应用阈值。

标准方法是使用a。如果你想要全部黑白,你需要在做卷积后应用阈值。

哇,你真的超越了,谢谢!这是一个很大的帮助!谢谢。这很有趣。还有一些更微妙的事情:当你接近一个边缘时,一个真正的卷积应该能够处理超出图片边缘的可能的输入/输出信息流。如果你只是使用我的高斯模糊代码,你会注意到物体在那里变得更模糊。哇,你真的超越了,谢谢!这是一个很大的帮助!谢谢。这很有趣。还有一些更微妙的事情:当你接近边缘时,一个真正的卷积应该能够处理超出图片边缘的可能的信息输入/输出流量。如果你只是使用我的高斯模糊代码,你会注意到物体在那里变得更模糊。