【发布时间】:2019-09-29 16:32:30
【问题描述】:
这个算法是我正在进行的一个更大项目的一部分,这个算法的作用是查找给定颜色的像素,然后返回它们的坐标。
def find_pixels(img):
labels = np.zeros((len(img), len(img[0])))
c = 0
x0 = 0
while True:
print(c)
pixel = find_pixel_v2(img, labels, x0)
if pixel[0] == False:
break
else:
i, j, labels, x0 = pixel[0][0], pixel[0][1], pixel[1], pixel[2]
c += 1
print((i,j))
def find_pixel_v2(img, labels, x0):
for i in range(x0, len(img)):
for j in range(0, len(img[0])):
if labels[i][j] == 1:
continue
else:
if img[i][j][0] != 0:
labels[i][j] = 1
return (i, j), labels, x0
else:
labels[i][j] = 1
return False, labels
输入 img 是一个形状 (x,y,3) 的数组。 标签是一个形状为 (x, y) 的零数组,以确保我不会遍历已经检查过的坐标。
问题是算法的运行时间随着时间的推移而严重减慢,我不知道为什么。
【问题讨论】:
-
您在哪里指定要查找的颜色?
-
img[ i ][ j ][0] != 0,其中 img[ i ][ j ] 是像素的 RGB 代码。
-
为什么在
find_pixel_v2中有时使用labels_有时使用labels?这是故意的吗? -
取决于
labels的大小,它可能会因为labels[i][j] = 1而变慢。我最近在 DataFrames 上遇到了类似的问题。与其调整标签并一次又一次地保存它们,不如尝试使用append将值保存在不断增长的列表中,然后将它们插入labels。例如pixels.append([i,j]) -
为什么需要多次调用
find_pixel_v2?难道你不能一次通过图像并收集一组左右的坐标吗?
标签: python arrays python-3.x numpy time-complexity