因此,基本上,我正在截屏并将其转换为RGB格式。之后,我有2个for循环可遍历每个像素并将正确的颜色绘制到像素中。我的程序正在运行,但是速度很慢...有没有办法使它运行得更快?
代码如下:
from PIL import ImageGrab
from graphics import *
win = GraphWin('screenshot',1000,1000)
def draw():
for y in range(1000):
for x in range(1000):
r, g, b = rgb_img.getpixel((x,y))
head = Circle(Point(x,y),1)
head.setFill(color_rgb(r,g,b))
head.setWidth(0)
head.draw(win)
while True:
img = ImageGrab.grab()
rgb_img = img.convert('RGB')
draw()
答案 0 :(得分:0)
您可以尝试多线程以使其更快
from PIL import ImageGrab
from graphics import *
import numpy as np
from threading import Thread
win = GraphWin('screenshot',1000,1000)
def draw(pixel_ranges):
for y in pixel_ranges:
for x in pixel_ranges:
r, g, b = rgb_img.getpixel((x,y))
head = Circle(Point(x,y),1)
head.setFill(color_rgb(r,g,b))
head.setWidth(0)
head.draw(win)
num_threads = 10
image_size = 1000
pixel_splits = np.split(np.arange(1000),num_threads)
n_threads = []
img = ImageGrab.grab()
rgb_img = img.convert('RGB')
for t in range(num_threads):
thread = Thread(target = draw, args = (pixel_splits[t],))
thread.start()
n_threads.append(thread)
for t in n_threads:
t.join()
基本上,我在这里的工作是使用np.arange()创建从0-1000的像素列表,并将该列表分成10个相等的部分,然后我们创建10个线程,负责在其像素中填充像素范围,因此线程0可以获取像素0-100,线程1可以获取像素100-200,依此类推,这应该可以大大提高性能
编辑:线程数量越多,代码将越快,但是要注意:如果您有4个CPU插槽,则每个CPU最多可以有12个内核,每个内核可以有两个线程。您的最大线程数为4 CPU x 12核心x每个核心2个线程,因此12 x 4 x 2为96。因此,最大线程数为96,最大内核数为48,超过该数量或接近该线程数量可能炸机器,