Skip to main content
 首页 » 编程设计

捕获图像并将其与另一个图像进行比较的python脚本

2025年05月04日9lidabo

基本上,我想自动化一些事情。我会捕获某个按钮的 100x50 图片,并有一个脚本以相同的尺寸拍摄相同区域的图片,然后比较两张图片以查看它们是否不同。如果它们不同,它什么都不做,如果它们相似 +/- 一定数量,它就会点击它。

我已经完成了屏幕捕获,只是不知道如何将它们与 PIL 进行比较。我做了很多谷歌搜索都没有成功。

请您参考如下方法:

您可以使用 pylab.imread 轻松地将图像读入 NumPy 数组:

In [3]: import scipy, pylab 
 
In [4]: x = pylab.imread('example.jpg') 
 
In [5]: x.shape 
Out[5]: (480, 640, 3) 

您可以查看图像或其任何子集:

In [6]: pylab.imshow(x) 
Out[6]: <matplotlib.image.AxesImage at 0x98e564c> 
 
In [7]: pylab.show() 

如果您想比较两个 8×8 block (例如,红色和蓝色层的左上角 block ),您可以计算均方误差:

In [8]: x[:8,:8,0] 
Out[8]:  
array([[147, 143, 146, 144, 146, 148, 146, 149], 
       [145, 142, 146, 145, 147, 149, 148, 151], 
       [143, 141, 146, 145, 147, 147, 148, 150], 
       [143, 143, 146, 146, 146, 145, 147, 148], 
       [147, 147, 147, 148, 147, 145, 146, 146], 
       [146, 147, 145, 147, 148, 145, 147, 146], 
       [146, 147, 144, 147, 147, 144, 146, 144], 
       [147, 148, 144, 147, 147, 144, 146, 144]], dtype=uint8) 
 
In [9]: x[:8,:8,1] 
Out[9]:  
array([[125, 121, 122, 120, 118, 120, 116, 120], 
       [123, 120, 122, 122, 119, 121, 118, 122], 
       [122, 120, 123, 122, 120, 120, 118, 121], 
       [122, 122, 123, 122, 120, 118, 117, 119], 
       [124, 123, 123, 124, 121, 119, 119, 119], 
       [122, 123, 120, 122, 121, 119, 119, 119], 
       [121, 122, 116, 119, 119, 117, 119, 117], 
       [122, 122, 115, 118, 119, 116, 119, 117]], dtype=uint8) 
 
In [10]: def mse(x, y): 
   ....:     return scipy.mean((x.astype(float)-y)**2) 
 
In [11]: mse(x[:8,:8,0], x[:8,:8,1]) 
Out[11]: 676.0625