
上QQ阅读APP看书,第一时间看更新
2.4.3 基于cameo.Cameo应用所有内容
我们的应用程序由带有两个方法(run和onKeypress)的Cameo类表示。在初始化时,Cameo对象创建了一个WindowManager对象(将onKeypress作为一个回调),以及一个使用摄像头(具体来说,是一个cv2.VideoCapture对象)和同一WindowManager对象的CaptureManager对象。在调用run时,应用程序执行一个主循环,并在这个主循环中处理帧和事件。
作为事件处理的结果,可能会调用onKeypress。空格键会产生一个屏幕截图,选项卡(Tab)键会使屏幕播放(视频录制)开始/停止,Esc键会使应用程序退出。
在与managers.py相同的目录中,创建一个名为cameo.py的文件,并在此实现Cameo类:
(1)首先,实现下面的import语句和__init__方法:

(2)接下来,添加以下run()方法的实现:

(3)下面是为完成Cameo类实现的onKeypress()方法:

(4)最后,添加一个__main__块来实例化并运行Cameo,如下所示:

在运行应用程序时,请注意实时摄像头回传信号是镜像的,而屏幕截图和屏幕播放则不是镜像的。这是预期的行为,因为在初始化CaptureManager类时,我们将True传给了shouldMirrorPreview。
图2-4是Cameo的一个屏幕截图,显示了一个窗口(标题为Cameo)和来自摄像头的当前帧。

图2-4 包含一个窗口和摄像头当前帧的Cameo截图
到目前为止,除了为预览而对帧进行镜像之外,我们没有对帧执行任何操作。我们将在第3章开始添加更有趣的效果。