2013-09-05 9 views
19

मुझे अपने यूएसबी वेबकैम से एक वीडियो स्ट्रीम कैप्चर करने की आवश्यकता है, इसके लिए मैं जावा में विकसित करने के लिए ओपनसीवी 2.4.6 का उपयोग करता हूं। मैं hereओपनसीवी + जावा = असंतुष्ट लिंक्स त्रुटि

में सूचीबद्ध चरणों का पालन करता हूं, मैं अपने सिस्टम पाथ में "सी: \ opencv \ build \ java \ x64" dir जोड़ता हूं और ईसीएलआईपीएसई पर अपने पुस्तकालयों में "opencv-246.jar" फ़ाइल शामिल करता हूं। जब 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()); 
    } 
} 

मैं मिल

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

ठीक =) लेकिन जब मैं

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!"); 
     } 
    } 
} 

चलाने मैं

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) 
मिल

C: ०५३६९१३६३२१०

मैं में सभी मार्गों containes जोड़ने \ opencv \ निर्माण \ 64 \ VC10

एक के बाद एक, लेकिन doesn `t काम करते हैं।

अंततः मैं OPENCV_DIR नामक एक चर बना देता हूं जिसमें C: \ opencv \ build \ x64 \ vc10 है लेकिन अभी भी असंतुष्ट LinkError प्राप्त हो रहा है।

कृपया मेरी मदद करें! @Jishnu प्रताप को

धन्यवाद:

उत्तर

28

अपने दूसरे उदाहरण में, आप इस लाइन

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

तो opencv libs लोड werent, UnsatisfiedLinkError, आदि ...

[संपादित करें] को छोड़ दिया java.library पथ समस्या को हाइलाइट करने के लिए, यदि आप इसे सेट करने में समस्याएं चलाते हैं, तो भी आप जावा रैपर के लिए एक पूर्ण पथ का उपयोग करने की कोशिश कर सकते हैं, इसलिए/dll/dylib जैसे:

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

स्थिर {System.loadLibrary (Core.NATIVE_LIBRARY_NAME -

Highgui.imread(fileName) 

:

इसी तरह:

imgcodecs imread/imwrite और दोस्तों

उदाहरण भी शामिल है); } यह सुनिश्चित करने के लिए कि यह एक बार लोड हो गया है .. –

2

जावा के साथ ओपनसीवी का उपयोग करते समय मुझे एक ही त्रुटि हुई। मैंने इसे हल करने के लिए 2 चीजें कीं।

  1. static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  2. मैं OpenCV dll के लिए पथ या .so javalibpath या पथ को जोड़ा गया। जो वास्तव में किसी कारण से काम नहीं करता था और मैंने सिस्टम 32 फ़ोल्डर में ओपनसीवी डीएल डालने का अंत किया।
0

तो, मुझे यह समस्या भी थी और मैंने जो भी सुझाव दिया, मैंने यह किया कि यह मेरी x64 विंडोज़ में ठीक काम करता है, लेकिन x86 में यह काम नहीं कर सका।

अंत में मैं बदल कर एक समाधान पाया:

VideoCapture capture = new VideoCapture(0); 

के लिए

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

क्यों यह काम मैं नहीं जानता लेकिन मुझे आशा है कि यह मेरी एक ही समस्या के साथ किसी को मदद मिल सकती है।

1

सामान्य उपयोगकर्ताओं के लिए opencv3.x का उपयोग कर:

highgui मॉड्यूल opencv 3.0 और उसके बाद के लिए जावा में अब मौजूद नहीं है।

import org.opencv.videoio.VideoCapture; 

import org.opencv.highgui.VideoCapture; 

videoio के बजाय

VideoCapture, VideoWriter भी शामिल है। >

Imgcodecs.imread(fileName) 
संबंधित मुद्दे