为什么此递归功能代码没有给出正确的答案?

时间:2019-12-11 10:26:27

标签: python image-processing astropy

我编写了一个代码,计算天空jpeg图片中的星星数量。在检测到具有255灰度数字的像素时,它将检查其相邻像素是否具有类似的颜色编码。如果相邻的255个像素的数量超过5个,它将一簇这样的像素声明为星形。下面是代码

img是使用cv2.imread读取灰度jpeg后获得的二维数组示例。

    img=[[0,0,0,0,0,0,0,0,0,0],[0,1,1,1,1,0,0,0,0,0],[0,0,1,1,1,0,0,0,0,0],[0,0,1,1,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0]]


stars=0
def check_depth(i,j,count):
    if img[i][j]==1:
        img[i][j]=0
        count+=1
        check_depth(i+1,j,count)
        check_depth(i,j+1,count)
        check_depth(i,j-1,count)
for i in range (1,4):
    for j in range (1,9):
        count=0 
        check_depth(i,j,count)
        if count>5:
            stars+=1
print(stars)

它的打印计数为0。我要去哪里错了?

1 个答案:

答案 0 :(得分:0)

我对递归函数的逻辑进行了一些编辑-基本上您的函数没有返回任何内容,因此我更改了一些赋值以及如何存储计数。更正后的代码如下。请注意,我保留了您看待的i和j的范围,但如果要搜索整个img矩阵,则可能应该使用类似for i in range(len(img))for j in range(len(img[i]))的东西。 ,例如。

img=[[0,0,0,0,0,0,0,0,0,0],[0,1,1,1,1,0,0,0,0,0],[0,0,1,1,1,0,0,0,0,0],[0,0,1,1,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0]]


stars=0
def check_depth(i,j,count):
    if img[i][j]==1:
        img[i][j]=0
        count += 1
        count = check_depth(i+1,j,count)
        count = check_depth(i,j+1,count)
        count = check_depth(i,j-1,count)
    return count
for i in range (1,4):
    for j in range (1,9):
        if check_depth(i, j, 0) > 5:
            stars+=1
print(stars)

输出:

>>> stars
1