怎么用Python实现屏幕截图
怎么用Python实现屏幕截图
本文小编为大家详细介绍“怎么用Python实现屏幕截图”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Python实现屏幕截图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、序言
在csdn上有很多纯copy,这给我复现带来了很大的麻烦,所以我想根据我的个人找截图的经历记录下来,给未来的自己看,免得忘记了云云。
二、环境配置
1、下载pyautogui包
pipinstallpyautogui-ihttps://pypi.tuna.tsinghua.edu.cn/simple/
注:使用pyautogui方法获取截屏的话,只下载这个就行了
2、下载opencv-python包
pipinstallopencv-python-ihttps://pypi.tuna.tsinghua.edu.cn/simple/
注:方便实现对图片的进一步处理,比如实时获取云云。
3、下载PyQt5包
pipinstallPyQt5-ihttps://pypi.tuna.tsinghua.edu.cn/simple/
注:使用PyQt方法截屏下载介个
4、下载pypiwin32包
pipinstallpypiwin32-ihttps://pypi.tuna.tsinghua.edu.cn/simple/
注:使用PyQt方法截屏下载介个
三、屏幕截屏源码与解析
1、使用pyautogui方法实现截屏
importpyautoguiimportcv2importnumpyasnpimg=pyautogui.screenshot(region=[300,50,200,100])#分别代表:左上角坐标,宽高#对获取的图片转换成二维矩阵形式,后再将RGB转成BGR#因为imshow,默认通道顺序是BGR,而pyautogui默认是RGB所以要转换一下,不然会有点问题img=cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)cv2.imshow("截屏",img)cv2.waitKey(0)
优点:
方便快捷,容易写核心部分就一行.速度快0.04s左右,基本可以达到实时截屏的效果。可以自由确定截屏区域
缺点:
但是不能指定获取程序的窗口,因此窗口也不能遮挡。 2、使用PyQt方法实现截屏 a.获取窗口的句柄,也就是目标窗口名title。
importwin32guihwnd_title=dict()#创建字典保存窗口的句柄与名称映射关系defget_all_hwnd(hwnd,mouse):ifwin32gui.IsWindow(hwnd)andwin32gui.IsWindowEnabled(hwnd)andwin32gui.IsWindowVisible(hwnd):hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)})win32gui.EnumWindows(get_all_hwnd,0)forh,tinhwnd_title.items():ift!="":print(h,t)
注:程序会打印所有窗口的hwnd和title,有了title就可以进行截图了。
b.使用PyQt5截屏核心程序
fromPyQt5.QtWidgetsimportQApplicationimportwin32guiimportsys#这个是截取全屏的hwnd=win32gui.FindWindow(None,'C:/Windows/system32/cmd.exe')app=QApplication(sys.argv)screen=QApplication.primaryScreen()img=screen.grabWindow(hwnd).toImage()img.save("screenshot.jpg")
注:如果想截取特定的窗口,只需要将C:/Windows/system32/cmd.exe换成上一个程序中打印的title,并且保证那个窗口没有被你最小化即可
优点:
方便快捷,容易写核心部分就一行.速度快0.04s左右,基本可以达到实时截屏的效果。可以自由确定要截屏的窗口
缺点:
不可以自由确定截屏区域 c.使用PyQt5截屏用Mat格式显示的核心程序
defconvertQImageToMat(incomingImage):'''ConvertsaQImageintoanopencvMATformat'''#Format_RGB32=4,存入格式为B,G,R,A对应0,1,2,3#RGB32图像每个像素用32比特位表示,占4个字节,#R,G,B分量分别用8个bit表示,存储顺序为B,G,R,最后8个字节保留incomingImage=incomingImage.convertToFormat(4)width=incomingImage.width()height=incomingImage.height()ptr=incomingImage.bits()ptr.setsize(incomingImage.byteCount())arr=np.array(ptr).reshape(height,width,4)#Copiesthedata#arr为BGRA,4通道图片returnarrfromPyQt5.QtWidgetsimportQApplicationimportwin32guiimportsysimportcv2importnumpyasnphwnd=win32gui.FindWindow(None,'剑士之魂中文版小游戏,在线玩,4399小游戏-360安全浏览器13.1')app=QApplication(sys.argv)screen=QApplication.primaryScreen()img=screen.grabWindow(hwnd).toImage()img=convertQImageToMat(img)#将获取的图像从QImage转换为RBG格式cv2.imshow("asd",img)#imshowcv2.waitKey(0)
读到这里,这篇“怎么用Python实现屏幕截图”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...