Python 3.x 用于循环到numpy的Python嵌套

Python 3.x 用于循环到numpy的Python嵌套,python-3.x,numpy,for-loop,Python 3.x,Numpy,For Loop,学习Python3.X是一种爱好。我写了一个简单的像素搜索: im = Image.open("photo.jpg").convert('RGB').Load for x1, y1 in product(range(300, 1100, 1), range(200, 500, 1)): r,g,b =im[x1,y1] rx,gx,bx = 200, 20, 20 if abs(rx - r)

学习Python3.X是一种爱好。我写了一个简单的像素搜索:

        im = Image.open("photo.jpg").convert('RGB').Load
        for x1, y1 in product(range(300, 1100, 1), range(200, 500, 1)):
            r,g,b =im[x1,y1]
            rx,gx,bx = 200, 20, 20
            if abs(rx - r)<=5 and abs(gx - g)<=5 and abs(bx - b)<=5:
                do stuff
                break
但它给出了一个错误:“Typeerror:需要一个整数。”
我做错了什么?我的方法是转换为numpy以提高性能的正确方法吗?

您可以通过
预处理步骤以矢量化方式获得匹配掩码,如下所示-

mask = (np.abs(im[300:1100, 200:500] - [200,20,20]) <= 5).all(-1)

因此,我们的想法是在嵌套循环中最小化工作量。此外,有了关于“做点什么”的更多信息,也可能对这些操作进行矢量化,从而进一步提高性能。

首先,在将循环变量重命名为
x
y
时,第二部分中没有定义
x1
y1
。其次,你仍然有循环。要提高性能,您应该去掉这些操作,并用矢量化操作替换它们。否则,性能不会变得更好。不过,为了帮助您,您需要知道什么是“do stuff”。“do stuff”只是将鼠标移动到与rx、gx、bx颜色匹配的像素上。另外,谢谢你的建议。我将尝试:)我收到一个错误,说'mask=(np.abs(im[300:1100,200:500]-[200,20,20])@blr69
im
的形状是什么?另外,你能试着用
.all(axis=-1)
代替吗?im=Image.open(“photo.jpg”).convert('RGB')。加载im是一张1920x1080的照片,但我也尝试检查一个特定部分。all(axis=-1)仍然给出相同的错误否其rgb。我正在尝试查找特定的rgb值:|
mask = (np.abs(im[300:1100, 200:500] - [200,20,20]) <= 5).all(-1)
for yi,y in enumerate(np.arange(200,500,1)):
    for xi,x in enumerate(np.arange(300,1100,1)):
        if mask[xi,yi]:
            #do something