2

画面全体からピクセルの RGB カラーを操作する必要があるミニ プロジェクトに取り組んでいます。私がこれまでに思いついた解決策は、スクリーンショットを連続して撮り、少し処理して RGB カラーを見つけることです。十分に高速ですが、スクリーンショット部分のために多くの CPU 使用率が必要です。

そのため、C++ ライブラリ、opengl*、または別のアプローチを使用して、必要なデータを (行列形式で) コンピューター メモリまたは GPU メモリから抽出できる方法があるかどうか疑問に思っていました。

Windows 7 64bit を使用していますが、解決策がクロスプラットフォーム (windows/linux/mac) であることが望ましいです。また、ソリューションが C/C++/Java/Python で実装できるとよいでしょう (これらのどれでも可能です)。

*先週いくつかの調査を行いましたが、opengl では可能ではないと思います。しかし、私はよくわかりません...

EDIT現在、JavaとPythonで、ディスプレイ全体のスクリーンショットを撮り、ピクセルのRGBカラーを平均化する作業コードがあります。Java では処理とロボット ライブラリを使用し、Python では PIL を使用します。Java では、createScreenCapture() で画像を取得し、getRGB() で値を読み取ります。Python では、ImageGrab.grab() で画像を取得し、オブジェクトをロードして、値をタプルで読み取ります。

例としての python コードは次のとおりです。

from PIL import Image
from PIL import ImageGrab
import operator

#######################################
#scree resolution
width = 1920
height = 1080
step = 10
#######################################

def process(pix):
    temp = (0, 0, 0)
    count = 0
    for i in range(0, width, step):
        for j in range(0, height, step):
            temp = tuple(map(operator.add, temp, pix[i,j]))
            count += 1
    return (int(temp[0]/count), int(temp[1]/count), int(temp[2]/count))

while True:
    img=ImageGrab.grab()
    pix = img.load()
    res = process(pix)
    print(res)

ただし、このコードは Windows でのみ機能します (imageGrab のため)...

4

0 に答える 0