Как установить режим панорамы в классе OpenCV Python Stitcher?

Основываясь на этом вопросе/ответе, я пытался используйте класс OpenCV Stitcher в python. Мой код в основном такой же, как в ответе.

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])

Проблема в том, что я хочу изменить режим с панорамного на сканирование. 1Stitcher.html" rel="nofollow noreferrer">В документации по c++ метод create имеет ввод режима. Тем не менее, класс createStitcher в Python принимает только один вход — стоит ли пробовать GPU. Есть ли способ указать режим в Python?

Когда я попытался создатьStitcherScans, я получаю сообщение об ошибке

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

Я нашел эту проблему GitHub, которая кажется актуальной, поскольку в привязках Python чего-то не хватает. Но это над моей головой, и я не уверен, как отредактировать код opencv, чтобы сделать это правильно. Я попытался добавить это в шитье.hpp:

typedef Stitcher::Mode Mode;

Но ничего не произошло. createStitcher(1, False) по-прежнему выдает ошибку атрибута. Любая помощь будет принята с благодарностью.


person Community    schedule 30.05.2018    source источник
comment
это также было бы интересно для меня, вы нашли решение?   -  person Kristan    schedule 08.08.2018


Ответы (3)


Это было решено в Open CV 4 (по крайней мере, в 4.1.0, которую я запускаю). Теперь вы можете указать mode в качестве аргумента ключевого слова для cv2.Stitcher.create:

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

Вроде метки перечисления для разных режимов еще не портированы, но с цифрами работает. PANORAMA — это 0, SCANS — это 1, как определено здесь.

Обратите внимание: если вы работаете в Google Colab, вы можете изменить версию Open CV следующим образом:

!pip3 install opencv-python==4.1.0.25
person Tim MB    schedule 06.08.2019

У меня такая же проблема. После просмотра документации она выглядит как функция оболочки python сопоставляется не с create(), а с createDefault(), который не имеет ввода режима, только ввод try_use_gpu. У меня нет опыта работы с обертками, но можно попробовать разобраться, прочитав Информация OpenCV о том, как работают привязки python.

основываясь на моей работе со стежком в python, кажется, что createDefault() создает сшиватель в режиме PANORAMA, поскольку он искажает мои изображения. Я не могу посвящать рабочее время просмотру оберток, но если я в конечном итоге потрачу личное время на это, я обновлю свой ответ здесь.

person JulietPapa    schedule 17.01.2019

Глядя на официальный тестовый код для Python на GitHub samples/python/stitching.py можно использовать Stitcher_PANORAMA или Stitcher_SCANS. Вы всегда можете проверить тестовый код любого модуля, например modules/stitching/misc/python/test в этом случае.

stitcher = cv.Stitcher.create(cv.Stitcher_PANORAMA)
person Burak    schedule 22.04.2021