2011-12-02 10 views
6

Chcę wykonać projekt z wykorzystaniem Computer Vision. Głównie wykrywanie/identyfikacja obiektu. Po pewnych badaniach wracam do OpenCV. Ale wszystkie tutoriale pochodzą z 2008 roku (wydaje mi się, że był wtedy duży). Nie kompiluje się w Pythonie na Macu. Korzystam z frameworka C++ zaraz po Xcode, ale żaden z tutoriali nie działa, ponieważ są przestarzałe, a dokumentacja jest do bani z tego, co mogę przeanalizować.OpenCV i Computer Vision, gdzie stoimy teraz?

Czy istnieje lepsze rozwiązanie dla tego, co robię, i czy ktoś ma jakieś sugestie, aby nauczyć się korzystać z OpenCV?

Dzięki

+0

Wypróbuj książkę OpenCV od O'Reilly? –

+0

Wydano: wrzesień ** 2008 ** - przepraszam, każdy samouczek z '08 nie działa. Uważam, że od tego czasu ramy znacznie się zmieniły. A z recenzji na tej stronie: "Książka była wtedy dobra, ale już nie obowiązuje, ponieważ została już przeniesiona wersja opencv. Powinni zaktualizować swoją książkę." – switz

+0

Zobacz przykłady w kodzie źródłowym OpenCV. – James

Odpowiedz

6

Miałem podobne problemy z rozpoczynaniem pracy z OpenCV i z mojego doświadczenia wynika, że ​​jest to największa przeszkoda w nauce.Oto, co zadziałało:

  1. Ta książka: "Książka kucharska aplikacji OpenCV 2 Computer Vision". Jest to najbardziej aktualna książka i ma przykłady, jak rozwiązywać różne problemy z Computer Vision (możesz zobaczyć spis treści na Amazon z "Look Inside!"). Naprawdę pomógł mi wejść do OpenCV i uświadomić sobie, jak działa biblioteka.

  2. Tak jak powiedzieli inni, próbki są bardzo pomocne. W przypadku rzeczy, które książka przeskakuje lub obejmuje tylko krótko, zwykle można znaleźć bardziej szczegółowe przykłady podczas przeglądania próbek. Możesz również znaleźć różne sposoby rozwiązania tego samego problemu między książką a próbkami. Na przykład, dla znalezienia keypoints/funkcje, książka pokazuje przykład za pomocą szybkiej funkcje:

    vector<KeyPoint> keypoints;
    FastFeatureDetector fast(40);
    fast.detect(image, keypoints);

    Ale w próbkach Znajdziecie wiele bardziej elastyczny sposób (jeśli chcesz mieć możliwość wyboru, które KeyPoint algorytm detekcji do użytku):

    vector<KeyPoint> keypoints;
    Ptr<FeatureDetector> featureDetector = FeatureDetector::create("FAST");
    featureDetector->detect(image, keypoints);

Z mojego doświadczenia rzeczy w końcu zacząć kliknij i bardziej konkretnych pytań rozpoczęcie poszukiwania up-to-aktualne informacje na blogach czy tu na StackOverflow.

0

Najprostsza odpowiedź, która przychodzi do głowy, to odczytać kodu Przykład z odrobiną zrozumienia i wypróbować jeśli Twoje pomysły działać. API się zmienia, a większość tutoriali jest napisana dla pierwszych wersji OpenCV i wygląda na to, że nikt nie zadał sobie trudu, aby je przepisać. Niemniej jednak główne idee, które za tym stoją, nie ulegają zmianie. Jeśli więc znajdziesz samouczek odpowiadający na Twoje pytania, ale napisany starym API, poszukaj w dokumentacji współczesnych zamienników używanych funkcji. To nie jest łatwe i szybkie, ale wygląda na to, że działa. Jeśli używasz najnowszej wersji (faktycznie 2.3), sugeruję użycie zarówno 2.1 documntation, jak i 2.3 docs + tutorials. Powinieneś także zajrzeć do próbek, które powinny zostać zainstalowane wraz z biblioteką. Istnieje wiele wskazówek, jak używać pewnych struktur i sztuczek, których nie wymieniono w dokumentacji. Wreszcie, nie bój się zajrzeć do kodu samej biblioteki (jeśli skompilowałeś ją na własną rękę). Niestety, to jedyne źródło, które znam, aby sprawdzić na przykład, jaki kod odpowiada obiektowi typu Mat.

2

Pozwól mi dodać kilka rzeczy. Po pierwsze, mogę zapewnić, że powiązania Pythona z OpenCV działają na komputerze Mac. Używam ich każdego dnia.

Wielu ludzi jak OpenCV z wielu powodów:

  1. Pozwolenie jest dobry, przyjazny dla integracji produktów handlowych, itp
  2. Jest całkiem dobry z technicznego punktu stoiska. Daje referencyjną implementację najnowocześniejszych algorytmów.
  3. Zwykle jest dość szybki w porównaniu do alternatyw (Matlab na ciebie patrzę).

Jak wszystko w życiu, to nie jest idealne:

  1. Jest dobrym przykładem biblioteki oprogramowania, który jest ruchomy cel. Mam 300 wierszowy program python, który używa OpenCV i co kilka miesięcy po wydaniu nowej wersji OpenCV Muszę to zmienić , aby dostosować się do nowych konwencji nazw/wywołań funkcji itp. Biblioteka robi postępy, dużo, ale to jest ból, aby zmienić ten sam program 3 razy w roku.
  2. Ma krzywą uczenia się, podobnie jak sama wizja komputera, to jest dość techniczne i niełatwe do nauczenia.

Istnieją alternatywy (z innymi zaletami i wadami) MATLAB z przybornikiem Image Processing jest jednym z takich przykładów.

Powiązane problemy