2015-04-13 12 views
5

Tak więc zdaję sobie sprawę, że mogę zadawać wiele z nie zakończonej wersji opencv, ale mam dziwne problemy z metodą cvtColor, którą nie może znaleźć żadnych innych odniesień do osób mających gdzie indziej. Najpierw, jako część wstępnej, piszę wielowątkową aplikację GUI używając PyQt4, QThreads, Python 2.7 i opencv na czarnym beaglebone. Moje obecne źródło można znaleźć na github HERE. Pierwotnie używałem debianowej wersji repo opencv, ale okazało się, że jest tak przestarzałe, że nie ma niektórych funkcji, których szukałem, a mianowicie klasy simpleblobdetector, i było bardzo powolne. Mając to na uwadze, skompilowałem najnowszy opencv 3.0.0 od zera i od tamtej pory zachowuje się dziwnie. W końcu zawęziłem to do problemu z cvtColor. Następnie uprościłem go do minimalnego kodu, aby upewnić się, że nie jest to coś, co powoduje problem. Oto, co mam, czego używałem do testowania.Python 2.7 i Opencv 3.0.0 cvtColor nie działają dla konwersji BGR/RGB

import cv2 

img = cv2.imread('images/original_image.png', cv2.IMREAD_COLOR) 

rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
bgr_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2BGR) 

cv2.imwrite("images/after_convert_to_rgb.png", rgb_img) 
cv2.imwrite("images/after_convert_to_gray.png", gray_img) 
cv2.imwrite("images/after_convert_back_to_bgr.png", bgr_img) 

Powstały obraz z tego kodu można znaleźć HERE.

Nie trzeba dodawać, że jestem zaskoczony w tym momencie. Szczególnie dziwne jest to, że konwersja na szary działa idealnie, podczas gdy pozostałe dwa w ogóle nie działają. Mam kilku moich znajomych, którzy pracują z opencv, sprawdzają zarówno mój oryginalny kod, jak i ten kod testowy i nie widzę w nim nic złego. Ponadto, nie będąc częścią tego kodu testowego, próbowałem czytać w różnych formatach plików i obrazach z różnych źródeł. Robi to samo, manipulując ramką opencv otrzymaną z klasy VideoCapture, ponieważ tam po raz pierwszy zobaczyłem problem i co ostatecznie próbuję zrobić.

Czy ktoś był świadkiem czegoś takiego w Opencv 3.0? Czy lepiej jest po prostu niestandardowe kompilowanie opencv 2.4 i używanie go zamiast tego? Zrobiłbym to w pierwszej kolejności, ale podążałem za przewodnikami na temat niestandardowego kompilowania opencv dla beaglebone black w szczególności i wszyscy używali najnowszego 3.0, więc pomyślałem, że będzie dobrze. W każdym razie, pomyślałem, że warto to sprawdzić, zanim ponownie wykonam proces kompilacji, ponieważ zwykle zajmuje mi to kilka dni, aby zrobić to dobrze, robiąc to z dnia na dzień.

EDYTOWANIE: Na wszelki wypadek, gdy ktoś inny szuka i chce się dowiedzieć, co odkryłem. Jest to z pewnością błąd w pobranym przeze mnie oprogramowaniu opencv 3.0. Nie mogłem znaleźć poprawki dla tej wersji i ostatecznie musiałem przejść na wersję 2.4.10. Od obniżki wszystko działa dobrze.

+1

Wygląda jak robaka. Myślę, że lepiej będzie przesłać raport o błędzie do trackera problemów OpenCV: http://code.opencv.org – jet47

+0

Czy to okazało się błędem? – ypx

+0

Tak, okazało się, że jest to błąd, na który nie mogłem znaleźć odpowiedzi, więc ostatecznie skompilowałem 2.4.10 i użyłem tego. –

Odpowiedz

2

Choć nie jest to „OpenCV-rozwiązanie” można po prostu zmienić kolejność kanałów kolorów przy użyciu czystego Pythona jako CV2-Interface korzysta NumPy-tablice do składowania danych:

rgb_img = bgr_img[:,:,::-1] #bgr --> rgb 
bgr_img = rgb_img[:,:,::-1] #bgr --> rgb