2014-09-28 95 views
0

我使用Desktopmagichttps://pypi.python.org/pypi/Desktopmagic/14.3.11#downloads 用下面的代码(由50像素50像素)的屏幕截图使用Python采取小:Win7上的Python:匹配来自2个不同PC的屏幕截图?

from desktopmagic.screengrab_win32 import (
    getDisplayRects, saveScreenToBmp, saveRectToBmp, getScreenAsImage, 
    getRectAsImage, getDisplaysAsImages) 

def snap_shot(left_offset, top_offset, width, height, file_name): 
    right=left_offset+width 
    bottom=top_offset+height 

    saveRectToBmp(file_name, rect=(left_offset, top_offset, right, bottom)) 

我也使用枕头比较截图给参考图像

from PIL import Image 

def compare_images(f1,f2): 
    h1 = Image.open(f1).histogram() 
    h2 = Image.open(f2).histogram() 

    rms = math.sqrt(functools.reduce(operator.add,map(lambda a,b: (a-b)**2, h1, h2))/len(h1)) 

    return rms 

一切工作正常,直到我试图将代码和参考图像迁移到新的PC。 对于人眼而言,在PC1上拍摄的截图与在PC2上截取的截图没有区别,但我的compare_images函数看起来有所不同。

当查找PC1上拍摄的参考图像和PC2上的屏幕截图之间的精确匹配时,测试失败。

那么.... 2台Windows电脑需要相同的渲染桌面窗口需要些什么? 我假设他们是相同的硬件,屏幕截图将匹配100%。但关键因素是什么?双方拥有相同的显卡是否足够?你认为什么因素可以发挥作用?

在此先感谢

回答

0

两台不同的机器可能有不同的操作系统版本(如果不是家庭)和他们的GUI元素(窗口,边框,窗口,图标,窗口 - TopFrameColouringScheme,桌面动机,光标图标,壁纸 - 图像/平铺/比例因子等等)

如果只有颜色深度设置不同(对于所有其他方面相同/相同的设置),结果像素值彼此不匹配(主要不能)。这种情况可以用最简单的方法检查 - 只需比较f1f2文件中32位色彩深度的BMP文件ColourPALETTE内容与减小的16位色彩深度。