OpenCV Matrix获取错误的值JNI Java

时间:2017-01-26 11:49:03

标签: android c++ opencv

我试图将OpenCV Matrix传递给cpp文件,但我在cpp中从Matix读取的数据不正确。

我不知道我在这里失踪了什么,也许是指针的东西。

这是我的cpp文件的一部分:

   jintArray
Java_qc_yotm_mes_com_yo_1qc_MainActivity_stringFromJNI(JNIEnv *env,jclass cls,jint NUMBER_OF_HALF_LINES, jint HALF_LINE_LENGTH, jlong inMat) {

    cv::Mat* GraySubMat =  (cv::Mat*)inMat;
    unsigned char * MatData = GraySubMat->data;

    jdouble SumSpikesHeight = 0;
    jint ListOfPeaks = 0;

    jintArray ListSpikesCount = env->NewIntArray(2 * NUMBER_OF_HALF_LINES);
    jintArray ListSpikesCountHeight = env->NewIntArray(2 * NUMBER_OF_HALF_LINES);

    jint outarray[2 * NUMBER_OF_HALF_LINES];


    for(int line_number = 0 ; line_number <  2 * NUMBER_OF_HALF_LINES ; line_number++) {
        //Find Peaks on every 5 pixels
        for (int i = 2; i < (HALF_LINE_LENGTH * 2) - 3; i++) {

            if ((MatData[(line_number *HALF_LINE_LENGTH * 2)+i] > MatData[(line_number *HALF_LINE_LENGTH * 2)+i - 1]) && (MatData[(line_number *HALF_LINE_LENGTH * 2)+i] > MatData[(line_number *HALF_LINE_LENGTH * 2)+i - 2]) &&
                (MatData[(line_number *HALF_LINE_LENGTH * 2)+i] > MatData[(line_number *HALF_LINE_LENGTH * 2)+i + 1]) && (MatData[(line_number *HALF_LINE_LENGTH * 2)+i] > MatData[(line_number *HALF_LINE_LENGTH * 2)+i + 2]) &&
                (MatData[(line_number *HALF_LINE_LENGTH * 2)+i] > 0) ) {
                ListOfPeaks++;
                SumSpikesHeight += MatData[(line_number *HALF_LINE_LENGTH * 2)+i];

                i += 3;
            }
        }

        outarray[line_number] = ListOfPeaks*SumSpikesHeight;

        SumSpikesHeight = 0;
        ListOfPeaks=0;
    }
    env->SetIntArrayRegion(ListSpikesCountHeight, 0, 2 * NUMBER_OF_HALF_LINES, outarray);
    return ListSpikesCountHeight;
}

这是Java调用:

 int[] spikecountheight = stringFromJNI(NUMBER_OF_HALF_LINES, HALF_LINE_LENGTH, GraySubMat.getNativeObjAddr());

0 个答案:

没有答案