2010-09-13 8 views
10

Jestem zdesperowany !! Próbuję użyć OpenCV w Java, poprzez (JNA do zawijania OpenCV do java).Używanie OpenCV w Javie z JavaCV

Jestem na Mac Os X 1.5.

Zainstalowałem OpenCV i mogę skompilować i uruchomić załączone przykłady. To działa.

Teraz otwieram Eclipse, i utworzyć nowy projekt, jak opisano tutaj: http://code.google.com/p/javacv/

W tym nowym projekcie, tylko jedno małe klasy z wywołaniem funkcji OpenCV (użyłem przykładowy kod):

import static name.audet.samuel.javacv.jna.cxcore.*; 
import static name.audet.samuel.javacv.jna.cv.*; 
import static name.audet.samuel.javacv.jna.highgui.*; 
import static name.audet.samuel.javacv.jna.cvaux.*; 

public class Test { 
    public static void main(String[] args) { 
     IplImage image = cvLoadImage("test.png", 1); 
     if (image == null) { 
      System.err.println("Could not load image file."); 
     } else { 
      cvSmooth(image, image, CV_GAUSSIAN, 3, 0, 0, 0); 
      // ... 
     } 
    } 
} 

Kiedy go uruchomić, mam następujący błąd:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'cxcore': dlopen(libcxcore.dylib, 9): image not found

Proszę, potrzebuję pomocy, przeglądałem Google przez wiele godzin, nie wiem już, gdzie szukać.

+0

pisać kodu proszę – dnul

+0

@Matthieu: OSX użytkownicy mają czasami problem ze zgodnością między biblioteki 32-bitową lub 64-bitową VM. Czy możesz spróbować opcji -d32 jako argument VM przy uruchamianiu konfiguracji uruchamiania Eclipse – JoseK

+1

Dodałem kod (jest to przykładowy kod z JavaCV). Spróbowałem argumentu "-d32" i otrzymałem następujący komunikat: "Nie można uruchomić Java w trybie 32-bitowym Kontynuacja w trybie 64-bitowym." Może to jest to? –

Odpowiedz

4

Okazało się, że wersja SVN nie jest zgodna z JavaCV.

Pobrałem najnowszą oficjalną wersję (2.1) i skompilowałem ją oraz zainstalowałem i działa.

Zobacz http://code.google.com/p/javacv/issues/detail?id=19

+0

dla prostszej implementacji również zajrzyj tutaj: http://ubaa.net/shared/processing/opencv/ –

+0

No cóż, okazuje się, że wersja 2.1 nie działa (przynajmniej na moim komputerze z OS X 10.5) , ale SVN działa w programach C++. Ale 2.1 jest kompatybilny z JavaCV, a nie z wersją SVN. Dla mnie teraz OpenCV może działać, ale nie JavaCV. –

1

Trzeba połączyć te dwie biblioteki:

- javacpp.jar 
- javacv.jar 

W JavaCV/lib-OpenCV/win_x86_64 trzeba mieć pliki z twoich jak:

- msvcp100.dll 
- msvcr100.dll 
- opencv_core220.dll 
- opencv_calib3d220.dll 
- ... 

Te biblioteki DLL muszą zostać skompilowane dla twojej platformy (wygrana 32/wygrana 64/Linux/itd.)

Musisz określić ścieżkę do plików OpneCV DLL:

-Djava.library.path=lib-opencv/win_x86_64/ 
- or the DLLs have to be somewhere in your system PATH of your operating system 
0

I wyglądało na ten problem na chwilę, jak PO proponuje wszystkie rodzaje problemów zaczynają wypełzają stolarki. Przeszedłem przez mnóstwo postów StackOverflow, aby móc wymyślić stosunkowo bezbolesne doświadczenie przy tworzeniu projektu OpenCV w Javie. Przeszedłem przez JavaCV i odkryłem, że nie spełnia moich potrzeb. Byłem jednak w stanie bezpośrednio implementować funkcjonalność, do której odwołują się posty OpenCV (posty C++), ale w języku Java, kiedy użyłem pewnych wersji javacpp. Miałem też mnóstwo problemów z kompilacją, ponieważ javacpp zależy od skompilowanych bibliotek C++, które muszą być natywne do środowiska, w którym znajduje się użytkownik (coś, co ludzie, którzy mieszkają na ziemi w języku Java, uwielbiają sobie nie radzić). W każdym razie udało mi się zbudować i stworzyć otoczenie z Mavenem. Używam Zaćmienie, ale powinno to działać dobrze w innych środowiskach programistycznych. Podałem przykładowy projekt, aby zilustrować, jak rozpocząć budowę projektu bootstrap i rozpocząć pracę. Projekt porównuje 2 obrazy z uwzględnieniem ich adresów URL. To test równości, a obrazy są identyczne lub nie. Mamy nadzieję, że pomoże to w konfiguracji i pracy w tym środowisku oraz uniknie tony i ton pułapek, które napotkałem podczas próby pracy z OpenCV w Javie (byłem w tym samym miejscu co OP w tym czasie :)).

Przykład: https://github.com/darkhipo/ImgzCmp