【问题标题】:opencv "C" methods in Opencv SDK for AndroidOpencv SDK for Android 中的 opencv "C" 方法
【发布时间】:2013-02-01 06:14:17
【问题描述】:

我已经下载了用于 Android 开发的 opencv2.4.2 Android SDK。我需要将一些 Opencv“C”代码转换为 android-opencv。但我可以在 android-opencv 中找到任何“C”函数。我只能在 Android opencv 中看到“CPP”功能。

例如,库中有"detectmultiscale",但我找不到"CvHaardetectobjects"。此外,我找不到任何以"Cv" 开头的函数。

当我使用“C”函数时,如果我在 Android-opencv 中也有相同的函数会很好。 android opencv中是否有可能获得或只有我们有CPP方法?

【问题讨论】:

    标签: android c++ c opencv image-processing


    【解决方案1】:

    OpenCV for Android 是基于 C++ 函数的,所以你会更好地找到 C++/Python Android/Java 之间的关系。

    您也可以浏览Android/Javafunctions here.

    此外,有些东西可能已被弃用,CvHaardetectobjects 看起来就是其中之一。好像被C++: CascadeClassifier::detectMultiScale或者Java: CascadeClassifier.detectMultiScale替换了。

    【讨论】:

      【解决方案2】:

      好的,如果您已经安装了 Android 版 OpenCV,那么您有 Java 类和方法可用于您的目的;如果你真的想使用 C++ 对象,你必须去 NDK 中开发......

      但在你的情况下,确实没有 Java CvHaardetectobjects on OpenCv for android;但在这种情况下,您可以将 HaarCascade 加载到 CascadeClassifier 中,之后您可以使用 detectMultiScale 执行基于 HaarCascade 的检测。

      你会得到与CvHaardetectobjects 相同的结果。

      请看下面的代码:

      /////////////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));
      

      【讨论】:

      • @2vision2 如果答案有用,请记住通过选中左侧的绿色对勾来接受它。如果没有,请询​​问更多。
      猜你喜欢
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2012-04-27
      • 2016-01-08
      相关资源
      最近更新 更多