(必須スキル)Pythonによる画面キャプチャ

記事ディレクトリ

  • (必須スキル)Pythonによる画面キャプチャ
    • 1. はじめに
    • 2. 環境構築
      • 1.pyautoguiパッケージをダウンロードする
      • 2.opencv-python パッケージをダウンロードします。
      • 3. PyQt5 パッケージをダウンロードする
      • 4. pypiwin32 パッケージをダウンロードします。
    • 3. ソースコードのスクリーンショットと分析
      • 1. pyautogui メソッドを使用してスクリーンショットを取得します。
      • 2. PyQtメソッドを使用してスクリーンショットを取得します
        • a. ウィンドウのハンドル、つまりターゲット ウィンドウ名のタイトルを取得します。
        • b. PyQt5 スクリーンショット コア プログラムを使用する
        • c. PyQt5 を使用して、Mat 形式で表示されたコア プログラムのスクリーンショットを取得します。
    • 4. 結論

1. はじめに

csdn上には純粋なコピーが大量に存在しており、再現するのにかなり苦労したので、これを忘れないようにスクリーンショットを見つけた個人的な経験をもとに記録し、未来の自分に見せたいと思います。
私は画像の処理に opencv を使用することを好むため、スクリーンショットには、opencv を使用して画像を表示する手順が含まれます。

2. 環境構築

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 メソッドを使用してスクリーンショットを撮り、紹介文をダウンロードします。

3. ソースコードのスクリーンショットと分析

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)

アドバンテージ:

  1. 便利で速く、核心部分を一行で簡単に書くことができます。
  2. 速度は約 0.04 秒速くなり、基本的にリアルタイム スクリーンショットの効果を実現できます。
  3. スクリーンショットの領域を自由に決められる

欠点:

  1. ただし、取得プログラムのウィンドウは指定できないため、ウィンドウをブロックすることはできません。

2. PyQtメソッドを使用してスクリーンショットを取得します

a. ウィンドウのハンドル、つまりターゲット ウィンドウ名のタイトルを取得します。

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 とタイトルを出力し、タイトルを使用してスクリーンショットを撮ることができます。

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 を前のプログラムで出力されたタイトルに置き換え、そのウィンドウが最小化されていないことを確認してください。

アドバンテージ:

  1. 便利で速く、核心部分を一行で簡単に書くことができます。
  2. 速度は約 0.04 秒速くなり、基本的にリアルタイム スクリーンショットの効果を実現できます。
  3. スクリーンショットを撮るウィンドウを自由に決定できます

欠点:

  1. スクリーンショットの領域を自由に決定できない

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个字节,# 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)  # Copies the data# arr为BGRA,4通道图片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()img=convertQImageToMat(img)#将获取的图像从QImage转换为RBG格式
cv2.imshow("asd",img)      #imshow
cv2.waitKey(0)

4. 結論

複数のスクリーンショットの方法を調べた結果、この 2 つのスクリーンショットの方法だけを学ぶ必要があることがわかったので、他の方法は含めませんでした。

おすすめ

転載: blog.csdn.net/qq_41879696/article/details/131993022