提取图像黑色像素的位置

2024-06-08 01:13:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在创建一个钢琴人工智能,它必须定位所有的黑色像素从图像抓取。我有图像抓取的所有位置,但我需要找出是否有黑色像素在那里,如果有,他们在哪里,这样我的人工智能可以点击他们。我把我的代码剪掉了。在

我已经在网上找过了,但是什么也找不到。我认为代码是这样的。在

from PIL import ImageGrab, ImageOps    

class Coordinates:    
    lines = [    
    (520, 300, 525, 760),    
    (630, 300, 635, 760),    
    (740, 300, 745, 760),    
    (850, 300, 855, 760)]    
    restartcheck = (660, 590, 725, 645)    
    restartbtn = (695, 615)    


blackpixelpositions = []    

def findtiles():    
    for line in Coordinates.lines:  
        i = ImageGrab.grab(line)  
        for pixel in i.getdata():  
            #if pixel is black  
            # x, y = pixel position  
             blackpixelpositions.append((x,y))  

我只需要上面的代码工作,并给我黑色像素的位置。在


Tags: 代码in定位图像forline像素人工智能
2条回答

您的i.getdata()有一个问题,它会使数据变平,也就是说,您丢失了像素坐标(除非您手动跟踪)。 所以你只知道存在一个黑色像素,而不知道在哪里。 您可以改用getpixel:

def get_black_pixels(image):
    found = []
    width, height = image.size
    for y in range(height):
        for x in range(width):
            if all(map(lambda x: x < 20, image.getpixel((x,y)))):
                found.append((x,y))
    return found

行:

^{pr2}$

只需检查所有值(r,g,b)是否低于20,您可以将其更改为其他阈值。在

你应该尽量避免在图像上循环和使用诸如getpixel()这样的函数来访问每个像素,因为每个像素的速度都很慢,尤其是当你正在抓取现代的4-5k屏幕时。在

通常最好将PIL图像转换为Numpy数组,然后使用向量化Numpy例程来处理图像。所以,具体来说,假设您通过抓屏或打开一个文件来获得PIL图像:

im = Image.open('someFile.png')

然后可以从图像中创建一个Numpy数组,如下所示:

^{pr2}$

像这样搜索黑色像素:

blacks = np.where((n[:, :, 0:3] == [0,0,0]).all(2)))

{cd2}的坐标{cd2}你可以给出一个{cd2}的坐标

xcoords, ycoords = np.where((n[:, :, 0:3] == [0,0,0]).all(2))

相关问题 更多 >

    热门问题