2015-12-18 2 views
5

Я пытаюсь использовать класс Stitcher OpenCV с Python, без везения. Мой код:Как использовать класс Stitcher OpenCV с Python?

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

Я получаю кортеж с (1, None).

Следуя примеру C++, я попытался передать массив numpy в качестве второго аргумента для стежка() без везения.

+0

Это очень интересная проблема. Я не нахожу документацию python для этой функции, хотя она есть. – tfv

ответ

8

Вы используете его правильно, по какой-то причине процесс невозможен.

Первое значение кортежа результата - это код ошибки, при этом 0 указывает на успех. Здесь у вас есть 1, что означает, согласно stitching.hpp, что для процесса требуется больше изображений.

enum Status 
{ 
    OK = 0, 
    ERR_NEED_MORE_IMGS = 1, 
    ERR_HOMOGRAPHY_EST_FAIL = 2, 
    ERR_CAMERA_PARAMS_ADJUST_FAIL = 3 
}; 

ERR_NEED_MORE_IMGS обычно указывает на то, что у вас нет достаточного количества ключевых точек в ваших изображений.

Если вам нужна дополнительная информация о причине возникновения ошибки, вы можете перейти на C++ и отладить процесс в деталях.


Edit: обеспечение рабочего примера

же код, как ОП, только что добавили результат сохранения и абсолютные пути.

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

с этими изображениями (я надеюсь, что вы любите панды)

foo.png

foo.png

bar.png

bar.png

result.jpg

result.jpg

+0

Гвен, спасибо за интерес к этой проблеме. Мы хотим иметь решение python, можете ли вы привести пример в python с изображениями, которые вы предоставляете? – tfv

+0

Не работает для меня, продемонстрировали свои проблемы с отдельным ответом выше. Вы можете помочь? – tfv

+0

Я не могу прокомментировать ваш ответ (недостаточно репутации ...). В OpenCV 3.0+ есть ошибка. Он остается неясным, но, похоже, связан с интеграцией OpenCL (см. [Этот отчет об ошибках] (https://github.com/Itseez/opencv/issues/5667)). Вам необходимо перестроить OpenCV без поддержки OpenCL и, возможно, прокомментировать строку 163 из 'cv2.cpp' (' // CV_Error (Error :: StsAssert, «Данные должны быть, как правило, NULL!»); ') – Gwen

Смежные вопросы