I am trying to take a screen shot, check the screen shot for a certain color, if the color is found then click on it.
The problem I'm having is that the RGB values of the color has to be exact.
I was wondering if it was possible to convert the image to an image with very few colors.
I'm sorry for the clutter. I am not properly trained. I am just obsessed with coding now.
Thank you for taking the time to read this.
import os, sys
import Image, ImageGrab, ImageOps
import time, random
from random import randrange
import win32api, win32con
from numpy import *
# Globals
# ------------------
x_pad = 0
y_pad = 0
# Screen Grab Function
def screenGrab():
b1 = (x_pad + 1,y_pad+1,x_pad+1921,y_pad+1081)
im = ImageGrab.grab()
##im.save(os.getcwd() + '\\Snap__' + str(int(time.time())) +'.png', 'PNG')
return im
## Grab Mouse Position
## MousePos = win32api.GetCursorPos()
## print MousePos
## Type in shell to grab RGB color
## im = screenGrab()
## im.getpixel(MousePos)
## Check Mouse Position for Black
## s = screenGrab()
## if s.getpixel(MousePos) <= (96, 96, 96):
##print "I see black."
# Main
x = 920
y = 465
# Color Check Then Stop/Click Loop
while True:
s = screenGrab()
s.convert("P", palette=Image.ADAPTIVE, colors=5)
x = x + 10
xy = (x, y)
if s.getpixel(xy)== (255, 255, 255):
break
else:
win32api.SetCursorPos((x, y))
print x
print y
if x == 1250:
x = 700
y = y + 10
if y == 985:
break
How do I use "s.convert("P", palette=Image.ADAPTIVE, colors=5)" correctly so that I limit the range of colors to something like (0, 255, 0)?
Instead of simplifying your color why don't you give range of RGB values when trying to find what color it is?
(range(200,220), range(200,220), range(200,220))
This would work around changing the RGB values of all the pixels.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With