当前位置: 首页 > 面试题库 >

使用OpenCV和Python-2.7截屏

李捷
2023-03-14
问题内容

我正在使用 Python 2.7OpenCV 2.4.9

我需要捕获显示给用户的当前帧,并将其作为 cv :: Mat 对象加载到Python中。

你们知道递归的快速方法吗?

我需要类似下面示例中的操作,该操作以递归方式从网络摄像头捕获 _ Mat_ 帧:

import cv2

cap = cv2.VideoCapture(0)
while(cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('WindowName', frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        cap.release()
        cv2.destroyAllWindows()
        break

在示例中,它使用了 VideoCapture类 来处理从网络摄像头捕获的图像。

通过VideoCapture.read(),始终可以读取新帧并将其存储到 Mat 对象中。

我可以将 “ printscreens流”
加载到VideoCapture对象中吗?我可以使用Python中的OpenCV创建计算机屏幕的流,而不必每秒保存和删除许多 .bmp 文件吗?

我需要将这些帧作为 Mat 对象或 NumPy数组 ,以便可以使用此帧实时执行一些计算机视觉例程。


问题答案:

这是@Neabfi的答案的更新答案

import time

import cv2
import numpy as np
from mss import mss

mon = {'top': 160, 'left': 160, 'width': 200, 'height': 200}
with mss() as sct:
    # mon = sct.monitors[0]
    while True:
        last_time = time.time()
        img = sct.grab(mon)
        print('fps: {0}'.format(1 / (time.time()-last_time)))
        cv2.imw('test', np.array(img))
        if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break

并保存到mp4视频

import time

import cv2
import numpy as np
from mss import mss


def record(name):
    with mss() as sct:
        # mon = {'top': 160, 'left': 160, 'width': 200, 'height': 200}
        mon = sct.monitors[0]
        name = name + '.mp4'
        fourcc = cv2.VideoWriter_fourcc(*'mp4v')
        desired_fps = 30.0
        out = cv2.VideoWriter(name, fourcc, desired_fps,
                              (mon['width'], mon['height']))
        last_time = 0
        while True:
            img = sct.grab(mon)
            # cv2.imshow('test', np.array(img))
            if time.time() - last_time > 1./desired_fps:
                last_time = time.time()
                destRGB = cv2.cvtColor(np.array(img), cv2.COLOR_BGRA2BGR)
                out.write(destRGB)
            if cv2.waitKey(25) & 0xFF == ord('q'):
                cv2.destroyAllWindows()
                break


record("Video")


 类似资料:
  • 我正在使用Python 2.7和OpenCV 2.4。9 我需要捕获显示给用户的当前帧,并将其加载为Python中的cv::Mat对象。 你们知道一种快速递归的方法吗? 我需要像下面的例子中所做的那样,从网络摄像头递归地捕获Mat帧: 在本例中,它使用了VideoCapture类来处理从网络摄像头捕获的图像。 用视频捕捉。read()新帧总是被读取并存储到Mat对象中。 我可以将“打印屏幕流”加载

  • 我试图在windows中导入软件包,但出现错误: 回溯(最近一次调用last):导入cv2 ImportError:numpy中第1行的文件“”。果心多重数组导入失败 我也试过numpy verson 1.11。1但它不起作用。

  • 问题内容: 我正在拼命尝试使OpenCV在Windows 7上运行。我下载并安装了它,但它不起作用,我得到了 当我尝试运行其中一个示例时。我用谷歌搜索我的问题,只得到了行不通的解决方案。任何人都可以指导我进行安装,或者知道在哪里可以为编程新手获得清晰的安装指南设计。 问题答案: 从OpenCV 2.2.0开始,Python绑定的软件包名称为“ cv”。名为“ opencv”的旧绑定不再保留。您可能

  • 问题内容: 在Python 3.3中(如或)中的“抽象基类”被移至了第二级模块。因此,在Python 3.3+中,实际类型为依此类推。文档指出,旧别名(例如)在Python 3.7(当前是最新版本)中可用,但是在3.8中,这些别名将被删除。 当您使用别名时,当前版本的Python 3.7甚至会产生警告: 在python 2.7中没有。 当Python脚本打算(几乎)与任何Python版本一起使用时

  • 问题内容: 我正在使用其他库在使用OpenCV(2.3.1)的python中进行项目开发。到目前为止,我只是apt- get安装了所有内容,但是现在我想与可能尚未安装所有内容的人共享我的代码。因此,virtualenv似乎是完美的解决方案,但我明白了。 我如何设置virtualenv时是否有问题,还是必须执行其他步骤才能看到我的opencv python绑定? 问题答案: Virtualenv创建

  • 问题内容: 我正在研究使用OpenCV(2.3.1)和其他库的python项目。到目前为止,我只是apt- get安装了所有内容,但是现在我想与可能尚未安装所有内容的人共享我的代码。因此,virtualenv似乎是完美的解决方案,但是我明白了。 我如何设置virtualenv时是否有问题,还是必须做一些其他步骤才能看到我的opencv python绑定? 问题答案: Virtualenv创建一个单