Pillow
を使えば、スクリーンショットは簡単に取得できます。
Pillowのimage形式のデータはNumpyでndarrayに変換できるので、あとはopencvで好きなように画像をいじれば良いかと思います。
検証コード:
python
1from PIL import ImageGrab
2import numpy as np
3import cv2
4
5# スクリーンキャプチャ
6img = ImageGrab.grab()
7# PILのimageをndarrayに変換
8cv_img = np.array(img, dtype=np.uint8)
9# 色変換
10cv_img = cv2.cvtColor(cv_img, cv2.COLOR_RGB2BGR)
11# テスト:画面表示
12cv2.imshow('figure',cv_img)
13cv2.waitKey(0)
14cv2.destroyAllWindows()
追記:マルチモニターの場合
ImageGrab.grab()
の引数に all_screens=True,
を入れると全てのスクリーンを一度に取得できます。Falseの場合は現在フォーカスがあるモニタ側の取得で、こちらがデフォルト動作。
そこから必要な部分を手動でクリッピングする必要があります。
全体取得してからクリッピングしても良いですし、bbox = (top, left, rigth, bottom)
オプションでクリップする座標を指定できます。
python
1# 例:横並びHullHD2台のモニタがあったとして、右側のモニタだけをクリップする場合
2img = ImageGrab.grab( all_screens=True, bbox=(1920,0,3840,1080) )
モニタ番号等の指定は不可能です。全体取得した画像から自力で判断してください。
その他のオプションは公式リファレンスを参照:
https://pillow.readthedocs.io/en/stable/reference/ImageGrab.html