Использование composePanorama в классе Stitcher с привязками OpenCV-Python

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

Pano не является массивом NumPy, ни скаляр

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

Примечание. Хотя класс Stitching в привязках 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])

0 ответов

Использовать stitcher.estimateTransform() а также stitcher.composePanorama() вам нужно будет

  1. Загрузите opencv https://github.com/opencv/opencv
  2. перейдите к opencv-master/modules/stitching/include/opencv2/stitching.hpp
  3. добавьте CV_WRAP перед любыми методами, которые вы хотите вызывать в Python. В этом случае это были бы EstimatesTransform и 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 для получения дополнительной информации.

У меня такая же проблема. Из того, что я вижу,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, не выполняя сложные задачи, указанные выше.

Другие вопросы по тегам