我在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。