2013-09-05 39 views
19

Tôi cần chụp một luồng video từ webcam USB của mình, vì tôi sử dụng Opencv 2.4.6 để phát triển trong Java. Tôi làm theo các bước được liệt kê trong hereOpenCV + Java = UnsatisfiedLinkError

Tôi thêm thư mục "C: \ opencv \ build \ java \ x64" vào Hệ thống PATH của tôi và bao gồm tệp "opencv-246.jar" vào thư viện của tôi trên ECLIPSE. Khi y chạy explame

import org.opencv.core.Core; 
import org.opencv.core.CvType; 
import org.opencv.core.Mat; 

public class Main { 
    public static void main(String[] args) { 
     System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
     Mat m = Mat.eye(3, 3, CvType.CV_8UC1); 
     System.out.println("m = " + m.dump()); 
    } 
} 

tôi nhận được

m = [1, 0, 0; 
    0, 1, 0; 
    0, 0, 1] 

OK =)

nhưng khi tôi chạy

import org.opencv.highgui.VideoCapture; 

public class Main { 
    public static void main(String[] args) { 
     VideoCapture vc = new VideoCapture(0); 
     if(vc.isOpened()){ 
      System.out.println("Works!"); 
     } 
    } 
} 

tôi nhận được

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.n_VideoCapture(I)J 
    at org.opencv.highgui.VideoCapture.n_VideoCapture(Native Method) 
    at org.opencv.highgui.VideoCapture.<init>(VideoCapture.java:113) 
    at Main.main(Main.java:5) 

i thêm tất cả các tuyến đường containes trong:

C: \ OpenCV \ xây dựng \ x64 \ VC10

từng người một, nhưng doesn `t làm việc.

Cuối cùng tôi tạo một biến có tên OPENCV_DIR với C: \ opencv \ build \ x64 \ vc10 nhưng vẫn nhận được UnsatisfiedLinkError.

XIN VUI LÒNG GIÚP TÔI!

Trả lời

28

trong ví dụ thứ hai của bạn, bạn bỏ qua dòng này

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

nên libs opencv werent nạp, UnsatisfiedLinkError, vv ...

[sửa]:

nhờ @Jishnu Prathap để làm nổi bật vấn đề đường dẫn java.library, nếu bạn gặp sự cố khi cài đặt, bạn vẫn có thể thử sử dụng đường dẫn tuyệt đối cho trình bao bọc java/dll/dylib như:

System.load("/path to/our/java_wrapper"); 
+2

tĩnh {System.loadLibrary (Core.NATIVE_LIBRARY_NAME); } để đảm bảo nó được tải một lần .. –

2

Tôi đã gặp lỗi tương tự khi sử dụng OpenCV với java.I đã làm 2 việc để giải quyết.

  1. static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  2. tôi đã thêm đường dẫn đến OpenCV dll hoặc .so để javalibpath hoặc đường dẫn. mà thực sự không hoạt động vì một lý do nào đó và tôi đã kết thúc việc đưa các tệp Open2V dll OpenCV vào thư mục system32.
0

Vì vậy, tôi cũng gặp vấn đề này và tôi đã làm tất cả những gì bạn đề xuất, nó hoạt động tốt trong các cửa sổ x64 của tôi, nhưng trong x86 không thể hoạt động.

Cuối cùng tôi tìm thấy một giải pháp bằng cách thay đổi:

VideoCapture capture = new VideoCapture(0); 

cho

VideoCapture capture = new VideoCapture(); 
    capture.open("resources/vid.MP4"); 

Tôi không biết tại sao điều này làm việc nhưng tôi hy vọng nó có thể giúp ai đó với cùng một vấn đề của tôi.

1

Đối với người dùng nói chung sử dụng opencv3.x:

mô-đun HighGUI không tồn tại nữa trong Java cho OpenCV 3.0 trở lên.

import org.opencv.videoio.VideoCapture; 

thay vì

import org.opencv.highgui.VideoCapture; 

videoio bao gồm VideoCapture, VideoWriter.

Tương tự:

imgcodecs bao gồm imread/imwrite và bạn bè

Ví dụ:

Highgui.imread(fileName) 

->

Imgcodecs.imread(fileName)