【发布时间】:2021-07-23 16:22:29
【问题描述】:
我需要在游戏运行时找到特定像素(BGR 格式)的坐标,
(我保存截图只是为了测试,程序自己连续截图)。
这是我需要的一个工作循环示例
s = np.array(Image.open("image.png"))
cr = []
for y in range(338):
for x in range(326):
C = s[y, x]
if C[1] < 25 and 20 <= C[0] < 25 and 130 < C[2] < 215:
cr.append((y, x))
但是 for 循环需要 1.03 秒,这对我的任务来说非常慢,所以我尝试了
cr = s[(20 < s[:,][:,0]) & (s[:,][:,0] < 25) & (s[:,][:,1] < 25) & (130 < s[:,][:,2]) & (s[:,][:,2] < 215)]
但它返回错误IndexError: boolean index did not match indexed array along dimension 1; dimension is 415 but corresponding boolean dimension is 3
那么我需要如何以最快的方式完成它?
编辑:
示例图片:
【问题讨论】:
-
您不能对
numpy使用链式比较。 (Numpy chain comparison with two predicates) -
@HenryEcker 好的,我编辑了描述
-
这需要一个最小的例子,因为我只是把那个单行代码放在我的解释器中,它没有抱怨,所以我们不得不看到它失败了。
-
而且
s[:,]和s不一样吗? -
最好的计划是分享您的实际图像和您实际寻找的内容,并说明您打算如何处理结果。