我编写了一个代码,计算天空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。我要去哪里错了?
答案 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