OpenCV: comment faire pour forcer la fenêtre de l'image s'affichent au-dessus des autres fenêtres?
À l'aide de cvShowImage
, on peut facilement montrer une image en OpenCV. Cependant, comment dites-vous OpenCV pour afficher la fenêtre sur le dessus de chaque autre fenêtre?
Je exécuter en plein écran d'une application OpenGL tout en montrant les images. La première fois que le OpenCV fenêtre pop-up s'ouvre sur le dessus de ma fenêtre de l'application, mais si je clique sur la fenêtre de mon application (c'est à dire donner le focus), alors je n'arrive pas à avoir le OpenCV revenir en haut de la fenêtre OpenGL, même lorsque la destruction et la recréation de la fenêtre.
J'ai pensé à renommer la fenêtre à chaque fois, mais est-il une autre façon de le faire?
- Cette application openGL s'exécute en plein écran ou dans une fenêtre? Je suis déchiré entre "plein écran openGL app" et "cliqué sur la fenêtre de l'application"
- vous avez raison, ce n'était pas clair: l'application OpenGL prend tout l'écran mais n'est pas lancé en mode plein écran; ce changement quelque chose de bien?
- Il n'. Ajouté à la manière de karl réponse. Lorsque vous obtenez poignée avec cvGetHandle vous pouvez windows comme sur le dessus, ou un ensemble fenêtre opengl en tant que parent de cv de l'image avec SetParent() de la fonction, de cette façon, lorsque votre fenêtre parent (openGL) sera active, fenêtre enfant sera toujours visible, mais pas active, qui est ce que vous voulez.
- Merci! Je vais essayer ça alors
- Vous feriez mieux de l'alimentation de la OpenCV Mat objet dans un Qt GUI (à l'aide de
QImage
ouQPixmap
méthodes statiques), alors l'intervalle Qt GUI vous donnera un contrôle total.
Vous devez vous connecter pour publier un commentaire.
OpenCV n'a aucun moyen natif pour ce faire (que je connais).
La réponse est dépendants de la plateforme. Si votre cible est Windows, vérifiez cette réponse et puis cette et cette sera certainement utile.
Si vous êtes sous Linux, vous avez besoin de prendre un coup d'oeil à la façon dont OpenCV a été compilé et vérifier ce que le système de son intégré sur la (probablement GTK+ 2.x). Ensuite, faites un peu de recherche de votre propre.
OK, j'ai trouvé une solution qui fonctionne pour OSX et Windows. Vous avez juste besoin de créer une fenêtre en plein écran et de le montrer pour un très court laps de temps, alors votre prochaine fenêtre de OpenCV sera en face.
Donc, d'abord pour ouvrir une fenêtre en plein écran:
Et ensuite, vous pouvez ouvrir la fenêtre qui fait de montrer l'image:
Cela fonctionne pour moi.
Sur MAC OSX (El Capitan) OpenCV 3.1.0, appelant moveWindow semble apporter la fenêtre, juste déplacé vers le haut.
import os
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
L'ajout de cette avant tout de mon code a fonctionné pour moi. Python 3.6.6 & macOS Mojave 10.14.2
Être prudent, cependant, l'image va apparaître sur l'un de vos "Ordinateurs de bureau" et non pas dans toute la Fenêtre Agrandie de l'App de l'écran lorsque vous appuyez sur le bouton vert en haut à gauche de votre application)
Ma solution pour OSX a été modifier mon OpenCV code (version 2.4.8), en particulier le fichier windows_cocoa.mm dans le highgui répertoire/src.
Si vous voulez juste mettre une nouvelle fenêtre à l'avant, sans le rendre actif, ajoutez la ligne suivante juste avant la fin de la fonction cvNamedWindow() dans windows_cocoa.mm:
À la force de la nouvelle fenêtre de toujours être actif, ajoutez la ligne suivante à la place:
Ce n'est probablement pas la meilleure idée pour tous les windows, mais fonctionne dans ma situation. Je suis fatigué de toujours avoir à les porter à l'avant en cliquant sur eux pour les rendre actifs.
J'ai trouvé que tout ce que j'avais à faire était de mettre mon principal fenêtre en plein écran puis retour à la normale. Je n'ai pas besoin d'ouvrir une fenêtre séparée. Je n'ai pas besoin d'afficher une image factice. Je n'ai pas besoin d'appeler waitKey.
J'ai trouvé la meilleure solution posté dans les commentaires ici: Python OpenCV fenêtre ouverte au-dessus des autres applications
Il suffit d'ajouter la commande ci-dessous après l'ouverture d'une fenêtre, par exemple
Utiliser "python" en minuscules. À l'aide de "Python", que j'ai trouvé des réponses, m'a donné une erreur:
J'ai d'abord essayé de l'édition de la windows_cocoa.mm de fichier, comme suggéré ci-dessus, mais il n'existe pas dans mon ordinateur. J'utilise un mac osx désert de mojave, OpenCV 3.4.2.