Проверить цвет пикселя питон

Получение и изменение цвета пикселя в изображении. Библиотека PIL Python

8 августа 2013 г. Archy Просмотров: 57265 RSS Обсудить
Работа с изображениями » Python для начинающих изменить пиксель python, сменить формат изображения python, сохранения изображения python

изменение цвета пикселя в изображении. Библиотека PIL Python

В прошлой статье мы узнали как установить библиотеку PIL в Python и начать уже с ней работать. В этой статье мы продолжаем изучение библиотеки PIL. Начиная с версией 1.1.6 метод load() возвращает объект, с помощью которого можно получить доступ к отдельным пикселям изображения. Указав два значения внутри квадратных скобок, можно получить или задать цвет пикселя.

>>> img = Image.open("foto.jpg") >>> obj = img.load() >>> obj[25, 45] # Получаем цвет пикселя (122, 86, 62) >>> obj[25, 45] = (255, 0, 0) # Задаем цвет пикселя (красный)

Для доступа к отдельному пикселю вместо метода load() можно использовать методы getpixel() и putpixel(). Метод getpixel() позволяет получить цвет указанного пикселя, а метод putpixel(, ) изменяет цвет пикселя. Координаты пикселя указываются в виде кортежа из двух элементов. Необходимо заметить, что эти методы работают медленнее метода load(). Пример использования метода getpixel() и putpixel() приведен ниже.

Читайте также:  Get html header javascript

Использование метода getpixel() и putpixel()

>>> img = Image.open("foto.jpg") >>> img.getpixel((25, 45)) # Получаем цвет пикселя (122, 86, 62) >>> img.putpixel((25, 45), (255, 0, 0)) # Изменяем цвет пикселя >>> img.getpixel((25, 45)) # Получаем цвет пикселя (255, 0, 0) >>> img.show() # Просматриваем изображение

В этом примере для просмотра изображения мы воспользовались методом show(). Метод show() создает временный файл в формате BMP и запускает программу для просмотра изображения, используемую в операционной системе по умолчанию. Например, на моем компьютере запускается программа ACDSee. Для сохранения изображения в файл предназначен метод save().

В первом параметре указывается абсолютный или относительный путь. Вместо пути можно передать файловый объект, открытый в бинарном режиме. Сохраним изображение в форматах JPEG и BMP разными способами.

Сохраняем изображение в Python

>>> img.save("tmp.jpg") # В формате JPEG >>> img.save("tmp.bmp", "BMP") # В формате BMP >>> f = open("tmp2.bmp", "wb") >>> img.save(f, "BMP") # Передаем файловый объект >>> f.close()

Обратите внимание на то, что мы открыли файл в формате JPEG, а сохранили его в формате BMP. Таким образом, можно открывать изображения в одном формате и конвертировать его в другой формат. Если сохранить изображение не удалось, возбуждается исключение IOError. Если параметр не указан, то формат изображения определяется по расширению файла.

В параметре можно указать дополнительный характеристики изображения. Поддерживаемый опции зависят от формата изображения. Например, по умолчанию изображения в формате JPEG сохраняются с качеством 75. С помощью опции quality можно указать другое значение в диапазоне от 1 до 100.

>>> img.save("tmp3.jpg", "JPEG", quality=100) # Указание качества

За дополнительной информации по опциям обращайтесь к документации. Так же для более подробной инструкции игры в покер можете прочитать poker правила и повысить свои навыки в этой игре. Удивите своих знакомых во время игры в покер, продемонстрировав им свой профессионализм игры.

Источник

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Быстрое получение цвета пикселя с экрана

#1 Авг. 8, 2018 20:34:26

Быстрое получение цвета пикселя с экрана

Нужно как можно быстрее получать информацию о цвете пикселя с экрана.
Благодаря каким библиотекам это можно реализовать? Желательно с примером кода. Спасибо.

Пока что пробую pyautogui.pixel() но он слишком медленный вот сам код

import time import pyautogui from pynput import keyboard pressD = False pressF = False pressJ = False pressK = False RUN = True while RUN: #D colorD = pyautogui.pixel(210,610) #Получение цвета пикселя print("colorD = ",colorD[0]) #Значение RED канала пикселя if colorD[0] > 230: #спам клавиши "d" keyboard.Controller().press('d') pressD = True print("'D' Down") else: if pressD: #прекращение спама keyboard.Controller().release('d') pressD = False print("'D' UP") #F colorF = pyautogui.pixel(310,610) #Получение цвета пикселя print("color = ",colorF[2]) #Значение BLUE канала пикселя if colorF[2] > 230: #спам клавиши "f" keyboard.Controller().press('f') pressF = True print("'F' Down") else: if pressF: #прекращение спама keyboard.Controller().release('f') pressF = False print("'F' UP") #J colorJ = pyautogui.pixel(410,610) #Получение цвета пикселя print("color = ",colorJ[2]) #Значение BLUE канала пикселя if colorJ[2] > 230: #спам клавиши "j" keyboard.Controller().press('j') pressJ = True print("'J' Down") else: if pressJ: #прекращение спама keyboard.Controller().release('j') pressJ = False print("'J' UP") #K colorK = pyautogui.pixel(510,610) #Получение цвета пикселя print("color = ",colorK[0]) #Значение RED канала пикселя if colorK[0] > 230: #спам клавиши "k" keyboard.Controller().press('k') pressK = True print("'K' Down") else: if pressK: #прекращение спама keyboard.Controller().release('k') pressK = False print("'K' UP") 

Код спамит клавиши D,F,J,K при правильном цвете соответствующих пикселей

Если быть точным, то мне нужно получение цвета 4 пикселей экрана не реже чем 60 раз в секунду (Суммарно в секунду не менее 240 значений)

Отредактировано lllNF (Авг. 10, 2018 12:06:56)

#2 Авг. 9, 2018 07:52:19

Быстрое получение цвета пикселя с экрана

С чего вы решили что он медленный? Где код по которому вы сделали вывод что он медленный?

ps
Если надо быстро обрабатывать картинку, то практически никогда не работают с отдельными пикселами даже на С не говоря уже о питоне у которого просто циклы в сотни раз медленнее.

#3 Авг. 9, 2018 11:58:37

Быстрое получение цвета пикселя с экрана

lllNF код в студию потому как даже в pyautogui есть несколько способов получить цвет пиксела.

#4 Авг. 10, 2018 12:07:23

Быстрое получение цвета пикселя с экрана

import time import pyautogui from pynput import keyboard pressD = False pressF = False pressJ = False pressK = False RUN = True while RUN: #D colorD = pyautogui.pixel(210,610) #Получение цвета пикселя print("colorD = ",colorD[0]) #Значение RED канала пикселя if colorD[0] > 230: #спам клавиши "d" keyboard.Controller().press('d') pressD = True print("'D' Down") else: if pressD: #прекращение спама keyboard.Controller().release('d') pressD = False print("'D' UP") #F colorF = pyautogui.pixel(310,610) #Получение цвета пикселя print("color = ",colorF[2]) #Значение BLUE канала пикселя if colorF[2] > 230: #спам клавиши "f" keyboard.Controller().press('f') pressF = True print("'F' Down") else: if pressF: #прекращение спама keyboard.Controller().release('f') pressF = False print("'F' UP") #J colorJ = pyautogui.pixel(410,610) #Получение цвета пикселя print("color = ",colorJ[2]) #Значение BLUE канала пикселя if colorJ[2] > 230: #спам клавиши "j" keyboard.Controller().press('j') pressJ = True print("'J' Down") else: if pressJ: #прекращение спама keyboard.Controller().release('j') pressJ = False print("'J' UP") #K colorK = pyautogui.pixel(510,610) #Получение цвета пикселя print("color = ",colorK[0]) #Значение RED канала пикселя if colorK[0] > 230: #спам клавиши "k" keyboard.Controller().press('k') pressK = True print("'K' Down") else: if pressK: #прекращение спама keyboard.Controller().release('k') pressK = False print("'K' UP") 

Отредактировано lllNF (Авг. 10, 2018 12:09:48)

#5 Авг. 10, 2018 14:10:23

Быстрое получение цвета пикселя с экрана

lllNF а у вас часом не венда? если венда то таки да он может работать медленно. Начнем с того что что у самого pyautogui нет метода pixel(), оно берет его из pyscreeze

. try: import pyscreeze from pyscreeze import (center, grab, locate, locateAll, locateAllOnScreen, locateCenterOnScreen, locateOnScreen, pixel, pixelMatchesColor, screenshot) . 
. def pixel(x, y): if sys.platform == 'win32': # On Windows, calling GetDC() and GetPixel() is twice as fast as using our screenshot() function. hdc = windll.user32.GetDC(0) color = windll.gdi32.GetPixel(hdc, x, y) # color is in the format 0xbbggrr https://msdn.microsoft.com/en-us/library/windows/desktop/dd183449(v=vs.85).aspx r = color % 256 g = (color // 256) % 256 b = color // (256 ** 2) return (r, g, b) else: return screenshot().getpixel((x, y)) . 

а у венды почемуто начмная с висты и выше с вклченным Windows Desktop Composition, GetPixel работает ну просто очень медленно. Хотя в коментах написано что GetPixel() работает в два раза быстрее чем screenshot().getpixel()
ps обсуждение сабжа на стекверфлов
https://stackoverflow.com/questions/3800458/quickly-getting-the-color-of-some-pixels-on-the-screen-in-python-on-windows-7
хотя ХЗ, вроде не так уж и медленно 0.003 сек у меня, по крайней мере

Отредактировано PEHDOM (Авг. 10, 2018 14:26:09)

Источник

Получение RGB цвета определённого пикселя на экране

Поиск определенного пикселя на экране
Здравствуйте. Я хочу найти определённый пиксель на экране. Я опробовал способ через opencv.

Поиск определенного пикселя на экране
Всем привет. Пишу игрового бота. Дано: Есть часть экрана размером в 1080х871 Нужно: Найти в этой.

получение координат пикселя определённого цвета
Не так давно начал изучать c++, перебрал множество вариантов. не как не могу быстро найти.

Получение значений RGB из пикселя
Имеется SDL_Surface в который я загрузил картинку, нужно получить значения RGB для каждого.

Эксперт Python

Эксперт Python

from PIL import Image im = Image.open('1.jpg', 'r') width, height = im.size pixel_values = list(im.getdata()) print(pixel_values)

Эксперт Python

Эксперт Python

from matplotlib.image import imread img = imread('abc.tiff') print(type(img))
import cv2 im = cv2.imread("abc.tiff",mode='RGB') print type(im)

никто не ответил про самый простой способ. Держите кому надо

>>> import pyautogui >>> pix = pyautogui.pixel(100, 200) >>> pix RGB(red=130, green=135, blue=144) >>> pix[0] 130 >>> pix.red 130
import win32gui def pixel_color_at(x, y): hdc = win32gui.GetWindowDC(win32gui.GetDesktopWindow()) c = int(win32gui.GetPixel(hdc, x, y)) # (r, g, b) return (c & 0xff), ((c >> 8) & 0xff), ((c >> 16) & 0xff) print(pixel_color_at(10, 10)) print(pixel_color_at(*win32gui.GetCursorPos()))

Определение цвета пикселя под курсором и контроль RGB ленты на Arduino
Доброго времени суток уважаемые форумчане! Как получить цвет пикселя под курсором на экране при.

Цвет определенного пикселя на экране
Как сделать процедуру с помощью которой в текстовом редакторе отображался цвет(в формате.

Определение цвета пикселя на экране
Добрый вечер, нужна помощь! Пишу программу, которая при определенном цвете пикселя выполняет клик.

Определение цвета пикселя на экране
Ребят, сразу прошу не счесть за тупость. Я гуглил! Представим, у меня есть на экране область, цвет.

Узнать цвет определенного пикселя на экране
Привет всем:) столкнулся с проблемой, а проблема состоит в том, что я хочу узнать цвет.

Поиск координат пикселя определенного цвета
Здравствуйте, уважаемые участники форума! Я только начинаю программировать на С++ Builder. У меня.

Быстрый поиск цвета пикселя на экране монитора
Подскажите как можно реализовать быстрый поиск определеного пикселя на экране. Накидал.

Источник

Оцените статью