使用Python将屏幕截图保存在数组中

1 人关注

我如何使用python、mss和opencv来捕捉我的电脑屏幕,并将其保存为一个图像阵列,形成一部电影?我正在转换为灰度,所以它可以是一个3维数组。我想把每个二维屏幕截图存储在一个三维数组中,以便查看和处理。我很难构建一个数组来保存屏幕截图的序列,并在cv2中播放屏幕截图的序列。

import time
import numpy as np
import cv2
import mss
from PIL import Image
with mss.mss() as sct:
    fps_list=[]
    matrix_list = []
    monitor = {'top':40, 'left':0, 'width':800, 'height':640}
    timer = 0
    while timer <100:
        last_time = time.time()
        #get raw pizels from screen and save to numpy array
        img = np.array(sct.grab(monitor))
        img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        #Save img data as matrix
        matrix_list[timer,:,:] = img
        #Display Image
        cv2.imshow('Normal', img)
        fps = 1/ (time.time()-last_time)
        fps_list.append(fps)
        #press q to quit
        timer += 1
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break
#calculate fps
fps_list = np.asarray(fps_list)
print(np.average(fps_list))
#playback image movie from screencapture
while t < 100:
    cv.imshow('Playback',img_matrix[t])
    t += 1
    
python
arrays
opencv
screenshot
python-mss
mlewk
mlewk
发布于 2017-07-27
2 个回答
Tiger-222
Tiger-222
发布于 2017-07-27
已采纳
0 人赞同

也许是一条线索,把截图保存到一个列表中,以后再重放(你必须适应睡眠时间)。

import time
import cv2
import mss
import numpy
with mss.mss() as sct:
    monitor = {'top': 40, 'left': 0, 'width': 800, 'height': 640}
    img_matrix = []
    for _ in range(100):
        # Get raw pizels from screen and save to numpy array
        img = numpy.array(sct.grab(monitor))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # Save img data as matrix
        img_matrix.append(img)
        # Display Image
        cv2.imshow('Normal', img)
        # Press q to quit
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break
    # Playback image movie from screencapture
    for img in img_matrix:
        cv2.imshow('Playback', img)
        # Press q to quit
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break
    
ewwink
ewwink
发布于 2017-07-27
0 人赞同

collections.OrderedDict() 来保存序列

import collections