Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从XA,YA到XB,YB查找特定RGB值_Python_Python 3.x_Python Imaging Library - Fatal编程技术网

Python 从XA,YA到XB,YB查找特定RGB值

Python 从XA,YA到XB,YB查找特定RGB值,python,python-3.x,python-imaging-library,Python,Python 3.x,Python Imaging Library,假设我要在屏幕上画一个虚构的盒子。在这个框中,我需要找到一个特定的RGB值并返回它的像素位置。我最初是多线程的,使用pyautogui移动鼠标并从光标下获取颜色值,但这并不可靠,我相信还有更简单的方法。不幸的是,我根本不从事图像处理工作,所以我向你们寻求帮助。我是否可以使用PIL或其他软件包来查找给定像素范围内的特定RGB值,并返回像素值?如果是,怎么做?这很容易做到。您可以使用PIL或OpenCV(我更喜欢OpenCV)读取图像,方法是: 这将返回形状的numpy数组(高度、宽度、通道)。由于

假设我要在屏幕上画一个虚构的盒子。在这个框中,我需要找到一个特定的RGB值并返回它的像素位置。我最初是多线程的,使用
pyautogui
移动鼠标并从光标下获取颜色值,但这并不可靠,我相信还有更简单的方法。不幸的是,我根本不从事图像处理工作,所以我向你们寻求帮助。我是否可以使用PIL或其他软件包来查找给定像素范围内的特定RGB值,并返回像素值?如果是,怎么做?

这很容易做到。您可以使用
PIL
OpenCV
(我更喜欢
OpenCV
)读取图像,方法是:

这将返回形状的numpy数组(高度、宽度、通道)。由于它是彩色图像,因此将有3个通道,在
opencv
中,将遵循BGR颜色方案

因此,要查找具有指定值的像素,可以使用注释中建议的numpy的
where
函数

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

pixels
将是包含图像中像素索引的数组。

使用
PIL
的一种方法是使用模块获取要搜索的区域

然后可以使用
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))

假设图像存储在名为
image
的变量中。你的像素值是R=50,G=60,B=80。您的像素值将是
image[np。其中((image[…,0]==R)和(image[…,1]==G)和(image[…,2]==B))
如果您必须在某个范围内进行检查,您只需在
np中添加一些比较即可。其中
使用
@sayandputta如果我必须加载图像,理想情况下它将是一个屏幕截图,不是图像文件。什么是np?numpy?我想如果你提供一个样本图像和颜色来检测,你会得到一个更好的答案。另外,如果你指出你是否在画想象中的盒子时有困难,尽管我不确定我们是否能看到一个想象中的盒子,或者找到颜色是否是问题所在。最好是拍摄一张屏幕截图或其他东西。理想情况下没有图像文件。它看起来不像是在特定像素范围内读取的(例如,从x600 y200到x1200 y600)?您将
像素定义为什么?
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))