Нахождение определенного значения RGB от XA, YA до XB, YB - PullRequest
0 голосов
/ 21 сентября 2019

Допустим, я должен был нарисовать воображаемую рамку на экране.В этом поле мне нужно найти конкретное значение RGB и вернуть его местоположение в пикселях.Первоначально я был многопоточным, использовал pyautogui для перемещения мыши и брал значение цвета из-под курсора, но это ненадежно, и я уверен, что есть более простой способ.К сожалению, я вообще не работаю с обработкой изображений, поэтому обращаюсь к вам, ребята, за помощью.Могу ли я использовать PIL или другие пакеты, чтобы найти определенное значение RGB в заданном диапазоне пикселей и вернуть значение (я) пикселей?Если да, то как?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Один из способов сделать это с PIL - использовать модуль ImageGrab, чтобы получить регион, который вы хотите найти.

Затем вы можете использовать load()метод, чтобы загрузить все пиксели этой области и найти все эти пиксели, которые имеют определенное значение RGB.

Ниже приведен код, демонстрирующий приведенное выше предложение:

from PIL import ImageGrab

x_start = 0
y_start = 0
width = 400
height = 400

bbox = (x_start,y_start,width,height)
rgb = (0,0,0)

image = ImageGrab.grab(bbox)

pixels = image.load()
for x in range(width):
    for y in range(height):
        if pixels[x,y] == rgb:
            print("{} {}".format(x,y))
0 голосов
/ 21 сентября 2019

Это довольно легко сделать.Вы можете прочитать ваше изображение, используя PIL или OpenCV (я предпочитаю OpenCV), используя:

import cv2
img = cv2.imread('path_to_image')

Это вернет вас с массивом фигуры (высота, ширина, каналы).Поскольку его цветное изображение будет иметь 3 канала, в opencv используется цветовая схема BGR.

Поэтому, чтобы найти пиксели с указанными значениями, используйте функцию where функции numpy, как предложено вcomments

red,green,blue = 10,20,30
pixels = np.where((img[...,0]==blue) & (img[...,1]==green) & (img[...,2]==red))

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

...