3 votes

Comment définir le mode Panorama dans la classe OpenCV Python Stitcher ?

Sur la base de cette question/réponse J'ai essayé d'utiliser la classe Stitcher d'OpenCV en python. Mon code est essentiellement le même que celui de la réponse.

import cv2

stitcher = cv2.createStitcher(False)
foo = cv2.imread("D:/foo.png")
bar = cv2.imread("D:/bar.png")
result = stitcher.stitch((foo,bar))

cv2.imwrite("D:/result.jpg", result[1])

Le problème est que je veux changer le mode de Panoramique en Scans. Dans la documentation c++, la méthode create a une entrée de mode. Cependant, la classe createStitcher en Python ne prend qu'une seule entrée : essayer ou non le gpu. Existe-t-il un moyen de spécifier le mode en Python ?

Lorsque j'essaie de créer des plans d'assemblage, j'obtiens une erreur

stitcher = cv2.createStitcherScans(False)
"AttributeError: 'module' object has no attribute 'createStitcherScans'"

J'ai trouvé ce problème GitHub qui semble pertinente, concernant les bindings Python qui manquent quelque chose. Mais cela me dépasse et je ne sais pas comment modifier le code opencv pour faire cela correctement. J'ai essayé d'ajouter ceci au stitching.hpp :

typedef Stitcher::Mode Mode;

Mais rien ne s'est passé. createStitcher(1, False) me donne toujours l'erreur d'attribut. Toute aide serait grandement appréciée.

2voto

Tim MB Points 1091

Ce problème a été résolu dans Open CV 4 (du moins dans la version 4.1.0 que j'utilise). Vous pouvez maintenant spécifier mode en tant que mot-clé argument à cv2.Stitcher.create :

stitcher = cv2.Stitcher.create(mode = 1)

Il semble que les étiquettes d'énumération pour les différents modes n'aient pas encore été portées, mais cela fonctionne avec les nombres. PANORAMA es 0 , SCANS es 1 tel que défini aquí .

Remarque : si vous travaillez sur Google Colab, vous pouvez modifier la version d'Open CV comme suit :

!pip3 install opencv-python==4.1.0.25

1voto

JulietPapa Points 21

Je rencontre le même problème. Après avoir consulté le la documentation il semblerait que la fonction python ne soit pas liée à create(), mais plutôt à createDefault() qui n'a pas d'entrée mode, seulement l'entrée try_use_gpu. Je n'ai pas d'expérience avec les wrappers, mais on peut essayer de comprendre en lisant Informations d'OpenCV sur le fonctionnement des liaisons python .

D'après mon travail avec stitch jusqu'à présent en python, il semble que createDefault() crée un stitcher en mode PANORAMA puisqu'il déforme mes images. Je ne peux pas consacrer du temps de travail à regarder les wrappers, mais si je finis par passer du temps personnel pour résoudre le problème, je mettrai à jour ma réponse ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X