处理来自Python截图的图像

2024-09-28 03:23:26 发布

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

我试图拍摄一个游戏的屏幕截图,bejeweled(一个8x8的棋盘),并从截图中提取棋盘的位置。我尝试过Image/Imagestat、autopy和从插槽中间抓取单个像素,但这些都不起作用。如果不是每幅图像的平均值,我就无法确定每幅图像的平均值。在

有没有人知道一种方法来获得一个图像区域的像素或颜色值?或者一种更好的方法来识别图像中的主色部分?在


Tags: 方法图像image游戏区域棋盘屏幕颜色
1条回答
网友
1楼 · 发布于 2024-09-28 03:23:26

我已经找到了一种使用Imagegrab和ImageStat来处理PIL的方法。以下是抓取屏幕并裁剪到游戏窗口:

def getScreen():
    # Grab image and crop it to the desired window. Find pixel borders manually.
    box = (left, top, right, bottom)        
    im = ImageGrab.grab().crop(box)
    #im.save('testcrop.jpg')  # optionally save your crop

    for y in reversed(range(8)):
        for x in reversed(range(8)):
            #sqh,sqw are the height and width of each piece.
            #each pieceim is one of the game piece squares
            piecebox = ( sqw*(x), sqh*(y), sqw*(x+1), sqh*(y+1))
            pieceim = im.crop(piecebox)
            #pieceim.save('piececrop_xy_'+ str(x) + str(y) + '.jpg')

            stats = ImageStat.Stat(pieceim)
            statsmean = stats.mean
            Rows[x][y] = whichpiece(statsmean)

上面的代码为所有64个片段创建一个图像,标识piecetype,并将其存储在数组“Rows”中。然后我用统计平均值并将它们存储在字典(rgbdict)中。将所有输出复制到Excel中,并按颜色类型筛选以获得这些平均值。然后我使用RSS方法和字典将图像与已知的片段类型进行统计匹配。(RSS参考号:http://www.charlesrcook.com/archive/2010/09/05/creating-a-bejeweled-blitz-bot-in-c.aspx

^{pr2}$

有了这两个功能,屏幕就可以被刮掉,电路板的状态就可以被转换成一个数组,在这个数组上可以决定动作。如果这对任何人都有帮助的话,祝你好运,如果你微调了移动选择器,请告诉我。在

相关问题 更多 >

    热门问题