如何在SWIG中从android传递xml文件路径到C ++包装器。

时间:2015-03-25 07:01:10

标签: java android c++ swig

我在Mac机器上实现了 swig android模块的面部检测器。我使用Swig模块成功生成了C ++包装器cpp源文件和JNI java文件。使用example_warp.cpp和示例生成了So文件。 CPP。

步骤

1.在java文件中获取面部检测器xml路径的绝对路径,并传递给 C ++代码。 2.在Example_wrap.cpp文件中将Java字符串转换为C ++字符串

const char* jnamestr = jenv->GetStringUTFChars(jFileName, NULL);
                string stdFileName(jnamestr);

3.字符串" stdFileName "将被传递到 example.cpp 文件

example.cpp

int sample(cv::Mat image,cv::Mat &out,cv::Mat &face,std::string stdFileName)
 {

 int z=5;
int z1=10;
int z2=15;

 CascadeClassifier face_cascade;
LOGD("cascade name : %s ",stdFileName.c_str());

   if( face_cascade.load(stdFileName.c_str()) ){ return z; };



  std::vector<Rect> faces;
  Mat frame_gray;

  cvtColor( image, frame_gray, CV_BGR2GRAY );
  cvtColor( image, out, CV_BGR2GRAY );


  //-- Detect faces
  face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|2, Size(30, 30) );



  if(faces.size()>0) {
                 vector_Rect_to_Mat(faces, face);


 // face=frame_gray(faces[0]);
  return z1;
  }

  return z2;
 }

4.我在android.c的example.cpp中得到了绝对路径。但是xml没有加载。

  The  absolute path stdFileName.c_str()="/data/data/org.opencv.samples.facedetect/app_cascade/lbpcascade_frontalface.xml"



 if( face_cascade.load(stdFileName.c_str()) ){  return z };

5.我总是从example.cpp返回 z值为5

如何加载绝对路径以上来自example.cpp中的android。

0 个答案:

没有答案