user7214612
user7214612

Reputation:

Get the RGB value of a specific pixel live

How would I be able to get the RGB value of a pixel on my screen live with python? I have tried using

from PIL import ImageGrab as ig
while(True):
    screen = ig.grab() 
    g = (screen.getpixel((358, 402))) 
    print(g)

to get the value but there is noticeable lag.

Is there another way to do this without screen capturing? Because I think this is the cause of lag. Is there a way to drastically speed up this process?

is it possible to constrain the ig.grab() to 358, 402 and get the values from there?

Upvotes: 1

Views: 1941

Answers (2)

Jack Aidley
Jack Aidley

Reputation: 20107

You will probably find it faster to use mss, which is specifically designed to provide high speed screenshot capabilities in Python, and can be used like so:

import mss

with mss.mss() as sct:
    pic = sct.grab({'mon':1, 'top':358, 'left':402, 'width':1, 'height':1})
    g = pic.pixel(0,0)

See the mss documentation for more information. The most important thing is that you want to avoid repeatedly doing with mss.mss() as sct but rather re-use a single object.

Upvotes: 1

Emmet B
Emmet B

Reputation: 5531

The following change will speed up it by 15%

pixel = (358, 402)
pixel_boundary = (pixel + (pixel[0]+1, pixel[1]+1))
g = ig.grab(pixel_boundary)
return g.getpixel((0,0))

Runtime:

  • proposed: 383 ms ± 5.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

  • original: 450 ms ± 5.31 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Upvotes: 0

Related Questions