网站的布局和配色,微博推广会被别人看出来吗,免费祝福网页在线制作,巴中汽车网站建设(必备技能)使用Python实现屏幕截图
文章目录
(必备技能)使用Python实现屏幕截图 一、序言二、环境配置 1、下载pyautogui包2、下载opencv-python包3、下载PyQt5包4、下载pypiwin32包 三、屏幕截屏源码与解析 1、使用pyautogui方法实现截屏2、使用PyQt方法实现截屏 a.获取窗口…(必备技能)使用Python实现屏幕截图
文章目录
(必备技能)使用Python实现屏幕截图 一、序言二、环境配置 1、下载pyautogui包2、下载opencv-python包3、下载PyQt5包4、下载pypiwin32包 三、屏幕截屏源码与解析 1、使用pyautogui方法实现截屏2、使用PyQt方法实现截屏 a.获取窗口的句柄,也就是目标窗口名title。b.使用PyQt5截屏核心程序c.使用PyQt5截屏用Mat格式显示的核心程序 四、结语
一、序言
在csdn上有很多纯copy这给我复现带来了很大的麻烦所以我想根据我的个人找截图的经历记录下来给未来的自己看免得忘记了云云。 由于我比较喜欢用opencv处理图像所以截屏最后都会附带一个使用opencv显示图片的一个步骤。
二、环境配置
1、下载pyautogui包
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple/注使用pyautogui方法获取截屏的话只下载这个就行了
2、下载opencv-python包
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/注方便实现对图片的进一步处理比如实时获取云云。
3、下载PyQt5包
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/注使用PyQt方法截屏下载介个
4、下载pypiwin32包
pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/注使用PyQt方法截屏下载介个
三、屏幕截屏源码与解析
1、使用pyautogui方法实现截屏
import pyautogui
import cv2
import numpy as npimg 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。
import win32guihwnd_title dict() #创建字典保存窗口的句柄与名称映射关系def get_all_hwnd(hwnd, mouse):if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})win32gui.EnumWindows(get_all_hwnd, 0)for h, t in hwnd_title.items():if t! :print(h, t)注程序会打印所有窗口的hwnd和title有了title就可以进行截图了。
b.使用PyQt5截屏核心程序
from PyQt5.QtWidgets import QApplication
import win32gui
import sys
#这个是截取全屏的
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格式显示的核心程序
def convertQImageToMat(incomingImage): Converts a QImage into an opencv MAT format # Format_RGB32 4,存入格式为B,G,R,A 对应 0,1,2,3# RGB32图像每个像素用32比特位表示占4个字节# RGB分量分别用8个bit表示存储顺序为BGR最后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) # Copies the data# arr为BGRA4通道图片return arrfrom PyQt5.QtWidgets import QApplication
import win32gui
import sys
import cv2
import numpy as np
hwnd win32gui.FindWindow(None, 剑士之魂中文版小游戏,在线玩,4399小游戏 - 360安全浏览器 13.1)
app QApplication(sys.argv)
screen QApplication.primaryScreen()
img screen.grabWindow(hwnd).toImage()imgconvertQImageToMat(img)#将获取的图像从QImage转换为RBG格式
cv2.imshow(asd,img) #imshow
cv2.waitKey(0)四、结语
我再查询了多个截屏的方法之后发现就学会这两种截屏方法即可所以就没有再放其他方法了