2016-01-29 7 views
13

का उपयोग कर लंबे org.opencv.core.Mat.n_Mat() त्रुटि के लिए कोई कार्यान्वयन नहीं मिला है। मैं अनुकूली थ्रेसहोल्ड के लिए ओपनसीवी का उपयोग कर रहा हूं। OpenCV का उपयोग कर छवि प्रसंस्करण के लिए मेरे कोड इस तरह है:ओपनसीवी

imageMat=new Mat(); 
Utils.bitmapToMat(bmp, imageMat); 
Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_BGR2GRAY); 
Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0); 
Imgproc.adaptiveThreshold(imageMat, imageMat, 255,Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4); 

लेकिन चटाई की घोषणा करते हुए मैं एक त्रुटि हो रही है। जैसा:

No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__) 
     at org.opencv.core.Mat.n_Mat(Native Method) 
     at org.opencv.core.Mat.<init>(Mat.java:24) 
     at com.example.pial_pc.instantbookreview.ImageCapture$3.onPictureTaken(ImageCapture.java:105) 

OpenCV के लिए नए रूप में, मैं स्पष्ट रूप से error.The पूरे जावा वर्ग जहां इस कोड अंतर्गत आता है here है समझ नहीं कर रहा हूँ।

त्रुटि को खत्म करने के लिए मुझे क्या करना चाहिए?

उत्तर

26

मैं सफलतापूर्वक त्रुटि को खत्म करने और जबकि इस लाइन को क्रियान्वित मेरे एप्लिकेशन क्रैश नहीं होता imageMat=new Mat();

त्रुटि के लिए कारण एंड्रॉयड OpenCV4Android library.So मैं लोड करने से पहले "onCreate" प्रणाली को बुलाती है कि है OpenCVManager का उपयोग कर OpenCV का Async प्रारंभिक उपयोग किया गया। मैंने बेसलोडर कॉलबैकसे पहले विधि बनाया है। और वह अंदर मैं नई चटाई() इस तरह की घोषणा कर दी:

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 
    @Override 
    public void onManagerConnected(int status) { 
     switch (status) { 
      case LoaderCallbackInterface.SUCCESS: 
      { 
       Log.i("OpenCV", "OpenCV loaded successfully"); 
       imageMat=new Mat(); 
      } break; 
      default: 
      { 
       super.onManagerConnected(status); 
      } break; 
     } 
    } 
}; 

फिर onResume() मैं अगर OpenCV पुस्तकालय लोड किया गया है और वर्तमान आवेदन पैकेज के भीतर या नहीं से प्रारंभ की जाँच कर ली है। कोड निम्नानुसार हैं:

public void onResume() 
{ 
    super.onResume(); 
    if (!OpenCVLoader.initDebug()) { 
     Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for initialization"); 
     OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); 
    } else { 
     Log.d("OpenCV", "OpenCV library found inside package. Using it!"); 
     mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 
    } 
} 

और मेरी त्रुटि समाप्त हो गई है। मेरा पूर्ण अद्यतन जावा क्लास here है।

संदर्भ लिंक:

  1. Async Initialization of OpenCV on Android using OpenCVManager
  2. Tutorial1Activity.java
4

प्रारंभ openCV पुस्तकालय अपनी गतिविधि में onCreate से पहले इस कोड को जोड़ना() विधि

 static { 
      if (!OpenCVLoader.initDebug()) { 
      // Handle initialization error 
      } 
      } 

इस प्रोजेक्ट को अपनी प्रोजेक्ट में जोड़ें: https://github.com/hschott/Camdroid