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
使用numpy递归地将图像中的黑色变为白色_Numpy_Image Processing - Fatal编程技术网

使用numpy递归地将图像中的黑色变为白色

使用numpy递归地将图像中的黑色变为白色,numpy,image-processing,Numpy,Image Processing,从灰度图像中删除较大阴影区域的最佳方法是什么。我正在努力编写一个方法,该方法接受2d Numpy数组a和a中的一个条目(x,y),并在数组中“爬行”,将任何(x',y')条目“连接”到(x,y)从0更改为255。我所说的连通是指从(x,y)到(x',y')有一些0值项的路径。这是我的意思 底部的黑色区域应全部设置为灰度255。我几乎肯定这个算法应该是递归的,在numpy或者使用PIL中有没有快速的方法可以做到这一点 编辑: 好的,谢谢你的建议,以下是我能想到的 def creep(data,

从灰度图像中删除较大阴影区域的最佳方法是什么。我正在努力编写一个方法,该方法接受2d Numpy数组a和a中的一个条目(x,y),并在数组中“爬行”,将任何(x',y')条目“连接”到(x,y)从0更改为255。我所说的连通是指从(x,y)到(x',y')有一些0值项的路径。这是我的意思

底部的黑色区域应全部设置为灰度255。我几乎肯定这个算法应该是递归的,在numpy或者使用PIL中有没有快速的方法可以做到这一点

编辑:

好的,谢谢你的建议,以下是我能想到的

def creep(data, x, y):
    data[x, y]=255 
    for (i,j) in [(1,0),(-1,0),(0,1),(0,-1)]:
        x, y = x + i, y + j 
        try:
            if data[x, y]==0:
                return creep(data, x, y)
        except:
            pass 
    return data 

def crop_big_region(data):
    """ Looks for black regions in image and makes them white """
    n, m = data.shape
    r = int(0.012*min(n,m)) 
    num_samples = int(0.0001*n*m)
    for _ in xrange(0,num_samples):
        x, y = numpy.random.randint(r,n - r), numpy.random.randint(r,m -r)
        if numpy.all(data[x-r:x+r, y-r:y+r] == 0):
            data[x,y] = 255
            data = creep(data, x, y)
    return data 
这似乎是一种工作,除了它只是返回行,而不是填写整个区域

我觉得我太累了,无法正确地理解这里的递归步骤

好吧,这不是真正的“python相关问题”,而是一个图像处理问题

我认为您可以有两种选择:
1.使用边缘检测,然后迭代以查看区域是否足够大 请看一个例子。
2.使用OpenCV。我不太清楚-但这段代码似乎做了一些非常接近您试图实现的事情
正如@Boaz所指出的,与其说是python问题,不如说是图像处理问题。您可以使用所谓的自适应阈值来实现所需的结果。有一个很好的实现,这里有一个完整的教程:


您需要对其进行一点调整,但它应该可以工作。

您必须对算法进行一点改进,否则如果有2个或更多相邻的黑色像素,它们将全部变为白色,从而消除阴影和打印。这可能会有所帮助:。这个程序是开源的。