提高Python中像素颜色检查器功能的速度性能

时间:2016-03-11 04:25:55

标签: python performance

我正在编写一个python函数,用于检查Windows桌面环境的某个区域是否有某种像素颜色,如果这种颜色符合某个条件,则python返回true。

问题是,最理想的是我需要在100ms或更短的定时频率下进行像素检查。我已经做了一种非常粗略的测量时序性能的方法,看来我得到的“刷新率”不超过~250毫秒。

是否有任何可能的方法来改善此脚本的性能和/或更准确地测量时序?

下面的代码:

import win32gui
import time

def get_pixel_colour(i_x, i_y):
    i_desktop_window_id = win32gui.GetDesktopWindow()
    i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
    long_colour = win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)
    i_colour = int(long_colour)
    return (i_colour & 0xff), ((i_colour >> 8) & 0xff), ((i_colour >> 16) & 0xff)

def main():
    for x in range(20):
        t1 = time.time()
        x = get_pixel_colour(25, 1024)
        y = str(x)
        if y == "(255, 255, 255)":
            print "True"
        else:
            print "Not True"
        t2 = time.time()
        print t2 - t1 #To calculate time

main()

1 个答案:

答案 0 :(得分:1)

无需拆分RGB组件。这需要一些时间。然后,从int到string的那些组件的3转换需要更多的时间。只需按原样返回像素值

def get_pixel_colour(i_x, i_y):
    i_desktop_window_id = win32gui.GetDesktopWindow()
    i_desktop_window_dc = win32gui.GetWindowDC(i_desktop_window_id)
    return win32gui.GetPixel(i_desktop_window_dc, i_x, i_y)

然后在main中直接比较RGB值

for x in range(20):
    t1 = time.time()
    if get_pixel_colour(25, 1024) == 0xFFFFFF
        print "True"
    else:
        print "Not True"
    t2 = time.time()
    print t2 - t1 #To calculate time