[][]

  //------------------------------
    //vector<Rect> faces;
    //equalizeHist( grayImage, grayImage );
    //face_cascade.detectMultiScale( grayImage, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

   // for( int i = 0; i < faces.size(); i++ ){
    //     Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
    //     ellipse( srcImage, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
    //}
    //imwrite("rstsrc.bmp",srcImage);

sa

//
// Created by duanjiwei on 2016/9/9.
//

#include <jni.h>
#include <opencv2/opencv.hpp>

extern "C" {

#define MAX_NUM 100

using namespace cv;
using namespace std;


JNIEXPORT jintArray JNICALL Java_com_example_duanjiwei_ndkdemoapp_MainActivity_grayProc(JNIEnv *env, jclass obj, jintArray buf, jstring str , jint w, jint h){
    const String face_cascade_name = "haarcascade_frontalface_alt.xml";
    CascadeClassifier face_cascade;

    jclass clsstring = env->FindClass("java/lang/String");  //获取java.lang.String的类型
    jstring strencode = env->NewStringUTF("utf-8"); //转码
    //获取clssting(byte[],String) 的构造器,将本地byte[]数组转换成一个新String
    jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
    jbyteArray barr = (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);  //建立barr数组
    jsize alen = env->GetArrayLength(barr);  //获取数组barr的长度
    jbyte* ba = env->GetByteArrayElement(barr, JNI_FALSE);  //将jbyteArray转换成jbyte*
    char* rtn;
    if(alen>0){
        rtn = (char*)malloc(alen + 1);
        memcpy(rtn, ba, alen);
        rtn[alen] = 0;
    }
    env->ReleaseByteArrayElement(barr, ba, 0);

    bool bIsLoad = face_cascade.load( rtn );
    if( bIsLoad == false ){
        return -1;
    }

     jboolean ptfalse = false;
     jint* srcBuf = env->GetIntArrayElements(buf, &ptfalse);
     if(srcBuf == NULL){
         return 0;
     }
     int size=w * h;

     Mat srcImage(h, w, CV_8UC4, (unsigned char*)srcBuf);
     Mat grayImage;
     cvtColor(srcImage, grayImage, COLOR_BGRA2GRAY);
     cvtColor(grayImage, srcImage, COLOR_GRAY2BGRA);

  

    //----------------------------------
    jintArray result = env->NewIntArray(size);
    env->SetIntArrayRegion(result, 0, size, srcBuf);
    env->ReleaseIntArrayElements(buf, srcBuf, 0);
    return result;
}

} //------extern "C"

 

posted @ 2016-09-13 16:38  Taily_老段  阅读(338)  评论(0编辑  收藏  举报