【发布时间】:2019-03-02 16:56:30
【问题描述】:
我需要我的截图函数尽可能快,现在每次调用该函数大约需要 0.2 秒。
这是函数:
def get_screenshot(self, width, height):
image = self.screen_capture.grab(self.monitor)
image = Image.frombuffer('RGB', image.size, image.bgra, 'raw', 'BGRX')
image = image.resize((int(width), int(height)), Image.BICUBIC) # Resize to the size of 0.8 from original picture
image = np.array(image)
image = np.swapaxes(image, 0, 1)
# This code below supposed to replace each black color ([0,0,0]) to the color of [0,0,1]
# r1,g1,b1 = [0,0,0] and r2,g2,b2 = [0,0,1]
red, green, blue = image[:, :, 0], image[:, :, 1], image[:, :, 2]
mask = (red == r1) & (green == g1) & (blue == b1)
image[:, :, :3][mask] = [r2, g2, b2]
return image
您是否注意到我可以做任何更改以使该功能更快?
编辑:我忘记提及的一些细节:
我的屏幕尺寸是1920*1080
此功能是我目前正在进行的直播项目的一部分。 Carlo 在下面建议的解决方案在这种情况下不合适,因为远程计算机不会与我们的计算机屏幕同步。
【问题讨论】:
-
您可以将
image = self.screen_capture.grab(self.monitor)移动到另一个函数,将结果添加到程序的全局列表中。之后创建另一个函数,稍后详细说明图像并从列表中删除对象。您可以使用多线程来做到这一点。 -
OK tnx,我会试试看。有人对加快功能有其他想法吗?
-
我已经用我的想法回答了这个问题
标签: python numpy python-imaging-library python-mss