2013-02-16 65 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