Использование 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()
вам нужно будет
- Загрузите opencv https://github.com/opencv/opencv
- перейдите к opencv-master/modules/stitching/include/opencv2/stitching.hpp
- добавьте 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, не выполняя сложные задачи, указанные выше.