当前环境python3.8
使用pycharm编写
用到mss, CV2 ,numpy库
库安装命令:
pip instal mss
pip install opencv-python==3.4.8.29
pip install numpy
默认会python基础基础,即看过一些基础教程,知道元组类型......
--------------------------------------------------------分割线----------------------------------------------------------
步骤1
创建dome文件,并导入mss库
步骤2
实例化mss的方法
步骤3
实例化mss的截图方法
3.1
3.2.
因为sec.grab()需要传入截取屏幕的起始点坐标以及长和高,通常我们的显示器分辨率是1920*1080,而起始点则在显示器的左上角原点(0 ,0) ,传入数据类型为元组。所以创建一个元组对象monitor = {},参数顺序为起始点坐标0,0,长1920,高1080。
步骤4
展示图片
通过grab方法我们获得了一张图片数据,即img。但mss获取的图片数据类型无法在 CV2 .show展示,所以我们需要对图片进行转换,这里用的是numpy库转换成数组
4.1
导入numpy库并重新命名
4.2.
转换图片类型
利用np.array()方法进行转换,传入img图片,并重新赋值,此时img图片以及转换完成
4.3.
导入 CV2 库
此时我们获得一张完整桌面截图img,要用 CV2 显示一张图片,这需要 CV2 .imshow()这个方法,这里需要传入2个参数,第一个是字符串类型,是展示图片框的名字,只能用英文字符串,中文会出现乱码。第二个参数是传入要显示的图片img
我们运行程序就会看到有一张图片一闪而过,因为展示的图片太快我们无法看清到底长什么样。这就需要 CV2 .waitKey(0) 进行延时,时间单位为毫秒,当里面的数值为0时是无限延时,为1000则是展现1秒,10000为10秒....
步骤5
这里,我们已经懂得了如何用mss截取一张图片,但我们还想用mss来做一些令人窒息的操作。
众所周知,视频就是一张张图片快速播放,如果我们在加上一个while循环,并将 CV2 .waitKey(1)设为1ms延时,就会得到一个屏幕监控窗口。
5.1.
裁剪显示窗口
但发现显示的窗口太大了,我们需要让他变更小一点,这里就需要 CV2 .resizeWindow()这个方法,对显示的窗口进行裁剪,需要传入窗口的名字参数,和需要裁剪的宽高。这里我用显示器的宽和高都进行整除4,也就是缩放成分辨率宽高的1/4, 可以放在循环外边,
这时我们发现一个问题,那就是裁剪之后窗口显示的不是全屏,而是原点的那一部分。这是因为我们裁剪了显示窗口,但没对窗口图片进行等比缩放,所以默认对图片也进行裁剪。
这就需要 CV2 .namedWindow('kkkk', CV2 .WINDOW_NORMAL):功能是新建一个显示窗口,可以指定窗口的类型。即指定kkkk的窗口类型为 CV2 .WINDOW_NORMAL。 CV2 .WINDOW_NORMAL函数是指图片可以随窗口大小进行缩放。可以提前指定,即在循环外指定,也可以在循环内指定,但指定一次就可以了,没必要重复指定
5.2.
运行程序,可以发现显示的窗口可以看到全屏了
but ,又有一个问题出现,那就是我们点窗口的×无法关闭窗口,这时就需要 CV2 .getWindowProperty()函数来帮我们关闭窗口.
函数解释:传入窗口字符串, CV2 .WND_PROP_VISIBLE是查看指定窗口状态,若窗口存在 CV2 .getWindowProperty 则返回1,不存在返回0, ,这里 if 为什么取反, 是因为 if 语句是为True执行,也就是为1执行,不取反会执行到这就退出, 取反之后表示 只要不是1就执行 if 语句
-----------------------------------------------------------分割线-------------------------------------------------------
整个流程代码如图所示
如果有什么纰漏,有什么补充的小伙伴可以私信或者评论留言,我会对文章进行修改。up现在也是一个python萌新,当时在查文档时浪费了一些时间,所以我把自己所理解的写成文案发出来。好让初学者可以有个参考。