2016-07-18 22 views
1

Ich möchte Objekte von Windows-Anwendungen, vor allem Computerspiele erkennen. Ich möchte dies erreichen, indem ich das Fenster in OpenCV öffne und alle Arten von Effekten auf die laufende Spielanwendung anwende und Objekte wie UI-Elemente, Nachrichten und sogar Zeichen auf dem Bildschirm erkenne.Wie öffnest du eine Windows-Anwendung als Quelle für OpenCV?

Da OpenCV nur Video und Webcam als Eingabe erlaubt, gibt es eine Möglichkeit, eine laufende Anwendung als Quelle für OpenCV zu öffnen?

Es gibt vielleicht einige Testanwendungen in der Spieleentwicklung, die ähnliche Methoden zum Testen verwenden, aber ich konnte keine finden.

Ich kenne auch nicht die richtigen Begriffe, die bei der Diskussion der Erkennung von virtuellen Objekten eines Computerprogramms oder Computerspiels verwendet werden, aber genau das möchte ich tun.

Ich habe versucht, Foren, Artikel oder irgendetwas darüber geschrieben, aber nichts gefunden. Jede Hilfe wäre willkommen.

+0

hwindowDC = GetDC (hwnd); hwindowCompatibleDC = CreateCompatibleDC (hwindowDC); SetStretchBltMode (hwindowCompatibleDC, COLORONCOLOR); –

Antwort

0

Ich habe OpenCV für ein Jahr verwendet und ich bin mir nicht sicher, ob Sie die laufende Anwendung dazu weitergeben können.

Als Alternative möchten Sie vielleicht eine Funktion haben, die Ihnen den aktuellen Screenshot des Desktops gibt. So können Sie es erhalten und an OpenCV übergeben.

Auf diese Weise können Sie regelmäßig Screenshots erstellen und Ihre Erkennung verwenden.

Wenn Sie unter Windows arbeiten Sie könnten this discussion.

Hoffnung brauchen diese Ihnen irgendwie helfen.

+0

Ja, das ist der Teil, den ich schon herausgefunden habe. Das Problem ist, dass ich die Bilder im Speicher und nicht in Dateien speichern muss (was auf lange Sicht jede Festplatte zerstören würde). Ich gehe davon aus, dass ich, wenn ich einen BMP-Screenshot im Speicher ablege (egal ob er einer Python-Variablen/Referenz oder einem C++ - Zeiger zugewiesen ist) immer noch mit OpenCV-Funktionen darauf zugreifen kann (egal welche Sprache ich anrufe) die API) und führe die Operationen aus, die ich brauche. Bin ich falsch oder ist das wirklich die Art, wie ich es mir vorstelle? – Disane

0

Ich habe alle Methode mit Desktop als Quelle in opencv vor ein paar Monaten als mein Experiment Projekt und ich Erfolg versucht, aber es gibt eine Spur in den Fenstern, als vielleicht die Geschwindigkeit oder Prozessor hängt davon ab. Es verwendet Ihre eigene Funktion, um den Desktop als Quelle nicht von opencv-Bibliotheken zu verwenden. Und von da an habe ich die gewohnten Dinge fortgesetzt und bin in einem Bug stecken geblieben, der etwas aus dem Gedächtnis hat, da er viel Speicher verbraucht. Ich habe auf Stackoverflow gepostet. Hoffe, dass diese Information hilft.