2013-02-16 132 views
0

我已經下載了適用於Android開發的opencv2.4.2 Android SDK。我需要將一些Opencv「C」代碼轉換爲android-opencv。但是我可以在android-opencv中找到任何「C」函數。我只能在Android opencv中看到「CPP」功能。Android的Opencv SDK中的opencv「C」方法

例如,"detectmultiscale"在庫中,但我找不到"CvHaardetectobjects"。此外,我找不到任何以"Cv"開頭的函數。

因爲我與「C」函數一起使用,如果我在Android-opencv中也有相同的函數,那將會很好。是否有可能獲得或只有我們在android opencv中有CPP方法?

回答

0

好的,如果你已經安裝OpenCV for Android,你可以使用Java類和方法來達到你的目的;如果你真的想要使用C++對象,你必須去開發NDK ...

但在你的情況下,確實沒有Java的OpenDSP for Android CvHaardetectobjects;但在這種情況下,您可以將HaarCascade加載到CascadeClassifier之後,然後您可以使用detectMultiScale執行基於HaarCascade的檢測。

而你得到的結果與CvHaardetectobjects相同。

請參見下面的代碼:

爲Android
/////////////Load the HaarCascade file into the clsssifier 
try { 
     InputStream is3 = getResources().openRawResource(R.raw.haarcascade_mcs_mouth); 
     File cascadeDir = getDir("cascade", Context.MODE_PRIVATE); 
     File mCascadeFile = new File(cascadeDir, "haarcascade_mcs_mouth.xml"); 
     FileOutputStream os3 = new FileOutputStream(mCascadeFile); 

     byte[] buffer = new byte[4096]; 
     int bytesRead; 
     Log.e("","Non c'è problema PRIMA della lettura del file"); 
     while ((bytesRead = is3.read(buffer)) != -1) { 
     os3.write(buffer, 0, bytesRead); 
     } 
     is3.close(); 
     os3.close(); 
     Log.e("","Non c'è problema con la lettura del file"); 
     mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath()); 
     if (mJavaDetector.empty()) { 
     Log.e(TAG, "Failed to load cascade classifier"); 
     mJavaDetector = null; 
     } else 
     Log.e(TAG, "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath()); 


     } catch (IOException e) { 
     e.printStackTrace(); 
     Log.e(TAG, "Failed to load cascade. Exception thrown: " + e); 
     } 
    //////Call detectMultiScale with the Detector that contains the cascade  
     mJavaDetector.detectMultiScale(mat,MapofRect,1.15,4,0,new Size(25,15),new Size(face.width(),face.height()/2)); 
+0

@ 2vision2如果答案有用,請記得通過檢查左側的綠色檢查來接受它。如果不是,請詢問更多。 – 2013-02-16 11:12:59