2015-12-18 16 views
5

Próbuję użyć klasy OpenCV Stitcher w Pythonie, bez powodzenia. Mój kod to:Jak używać klasy OpenCV Stitcher w Pythonie?

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

Dostaję krotkę z (1, brak).

Podążając za przykładem C++, próbowałem przekazać tablicę numpy jako drugi argument do ściegu() bez powodzenia.

+0

To bardzo interesujący problem. Nie znajduję żadnej dokumentacji Pythona dla tej funkcji, chociaż jest tam. – tfv

Odpowiedz

8

Używasz go dobrze, czy proces z jakiegoś powodu nie powiódł się.

Pierwszą wartością krotki wynikowej jest kod błędu, przy czym 0 oznacza powodzenie. Tutaj masz 1, co oznacza, zgodnie z stitching.hpp, że proces potrzebuje więcej zdjęć.

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

ERR_NEED_MORE_IMGS zwykle oznacza, że ​​nie masz w swoich obrazach wystarczająco keypoints.

Jeśli potrzebujesz więcej informacji o przyczynach błędu, możesz przełączyć się na C++ i szczegółowo przeanalizować proces.


Edit: zapewnienie przykładem pracy

sam kod jak OP, po prostu dodaje wynik zapisać i ścieżki bezwzględnej.

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

z tych obrazów: (mam nadzieję, że kochasz pandy)

foo.png

foo.png

bar.png

bar.png

result.jpg

result.jpg

+0

Gwen, dzięki za zainteresowanie tym problemem. Chcemy mieć rozwiązanie Pythona, czy możesz podać przykład w pythonie ze zdjęciami, które podasz? – tfv

+0

Nie działa jeszcze dla mnie, pokazałem moje problemy z oddzielną odpowiedzią powyżej. Możesz pomóc? – tfv

+0

Nie mogę skomentować Twojej odpowiedzi (za mało reputacji ...). Występuje błąd w OpenCV 3.0+. Pozostaje niejasne, ale wydaje się być związane z integracją OpenCL (patrz [ten raport o błędzie] (https://github.com/Itseez/opencv/issues/5667) na przykład). Musisz przebudować OpenCV bez obsługi OpenCL, a może linii komentarza 163 z 'cv2.cpp' (' // CV_Error (Błąd :: StsAssert, "Dane powinny zwykle mieć wartość NULL!"); ') – Gwen

Powiązane problemy