Использование composePanorama в классе Stitcher с привязками OpenCV-Python - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь оценить трансформацию для некоторых изображений и прошить их, используя stitcher.estimateTransform() и stitcher.composePanorama() в python.После оценки преобразования, composePanorama выдает ошибку, как показано ниже:

pano не является массивом numpy, ни скалярным

Я пытался преобразовать массив NumPy Array в объект Mat, используяcv2.fromarray(left), но он работает только для cv, а не cv2.Поэтому, как я могу преобразовать этот NUMPY в массив MAT в Cv2.Я не нашел примеров использования composePanorama с привязками Python.Любое решение этой ошибки или пример использования stitcher.estimateTransform() с привязками OpenCV-Python приветствуются.

Примечание : хотя класс сшивания в привязках OpenCV-Python не завершен (из-за автоматическогосгенерированные), help(cv2.createStitcher()) демонстрирует, что он содержит composePanorama() и estimateTransform().

Примечание : я могу использовать stitcher.stitch() без проблем, но использование stitcher.stitch() мне не помогает, потому что я пытаюсь не вычислять преобразование для каждой итерации в основномцикл.

Мой простой код:

leftStream = cv2.VideoCapture(0)
rightStream = cv2.VideoCapture(1)
left = leftStream.read()[1]
right = rightStream.read()[1]
st = cv2.createStitcher(False)
st.estimateTransform([left, right])
st.composePanorama([left, right])

Ответы [ 2 ]

0 голосов
/ 06 августа 2019

Чтобы использовать stitcher.estimateTransform() и stitcher.composePanorama(), вам потребуется

  1. Скачать opencv https://github.com/opencv/opencv
  2. перейти к opencv-master / modules / stitching / include / opencv2 /stitching.hpp
  3. добавьте CV_WRAP перед любыми методами, которые вы хотите вызывать в Python.В этом случае это будут valuesTransform и composePanorama

Затем для сборки модуля python:

cd ~/opencv
mkdir build
cd build
cmake ../
make
sudo make install

Затем переместите модуль в вашу виртуальную среду, откуда бы он не был установлен.В моем случае это было /usr/local/lib/python3.7/site-packages/cv2.

См. https://www.pyimagesearch.com/2018/08/17/install-opencv-4-on-macos/ и https://docs.opencv.org/4.1.0/da/d49/tutorial_py_bindings_basics.html и https://docs.opencv.org/4.1.1/da/df6/tutorial_py_table_of_contents_setup.html длябольше информации.

0 голосов
/ 06 августа 2019

У меня такая же проблема.Из того, что я вижу, composePanorama имеет две перегрузки.

CV_WRAP Status composePanorama(OutputArray pano);
Status composePanorama(InputArrayOfArrays images, OutputArray pano);

Это вторая перегрузка, которая нам нужна, поскольку pano - это выходной параметр, который в Python задается как возвращаемое значение.К сожалению, вторая перегрузка не отмечена CV_WRAP, что сделало бы ее доступной для привязок Python.Итак, единственные решения, которые я вижу:

  • Использование альтернативной реализации сшивания
  • Просмотрите код C ++ отсутствующей реализации composePanorama и самостоятельно переопределите его в Python
  • Зарегистрируйте проблему на Open CV Github и дождитесь обновления
  • Создайте Open CV самостоятельно из исходного кода и пометьте функцию как CV_WRAP (я не уверен, что на самом деле все так просто)
  • Работа в C ++ вместо Python

Хотя я буду очень рад, если кто-то еще сможет опубликовать ответ, показывающий, как этого добиться в Python, не выполняя сложные задачи, перечисленные выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...