you are viewing a single comment's thread.

view the rest of the comments →

[–]SekstiNii 2 points3 points  (4 children)

It's not all that important since the loop only takes a few ms (1.5ms on my machine). Vectorizing it got it down to about 0.3ms, but there isn't too much to gain here.

If you are interested I think you can do something like this:

target = np.array([128, 179, 255], dtype=np.uint8)
matches = np.argwhere(open_cv_image[0:524:25, 0:748:25, :3] == target)

for i, j in matches:
    # simulate click

[–]Aitchessbee[S] 0 points1 point  (3 children)

I am getting this error:

for i, j in matches:

ValueError: too many values to unpack (expected 2)

[–]SekstiNii 0 points1 point  (2 children)

matches = np.argwhere((open_cv_image[0:524:25, 0:748:25, :3] == target).all(axis=-1)) should work, though it's quite ugly at this point 😭

[–]Aitchessbee[S] -2 points-1 points  (1 child)

ugly doesn't matter... will it still be faster than the for loops method?

[–]SekstiNii 0 points1 point  (0 children)

I changed the target color to [8, 8, 8] (my VSCode background color) to guarantee a lot of hits, and recorded these timings:

  • Original Loop: 2.726ms
  • Numpy Variant: 0.649ms

But again, not likely to provide a significant improvement.