使用__android_log_print打印Opencv Mat,Android NDK的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用__android_log_print打印Opencv Mat,Android NDK的内容相关的知识,希望对你有一定的参考价值。

我有以下代码,我想用它来将trainingLables Mat的内容打印到android控制台:

#include <android/log.h>

JNIEXPORT jintArray JNICALL  Java_com_example_user_activity_MainActivity_generateAssets(JNIEnv* env, jobject thiz, jobject assetManager) {

    .....
    .....

    Mat_<int> trainingLabels(1,10);
    trainingLabels << 0, 0, 0, 1, 1, 1, 0, 1, 1, 1;

    __android_log_print(ANDROID_LOG_ERROR, "TESTING", "%d %d", trainingLabels.???????);

    ......
    ......


}

我有两个问题:

1)我使用什么方法从trainingLabels打印一行数据? (我在代码中用什么代替问号?)

2)如何在Android LogCat中搜索__android_log_print中的内容?

答案

您可以事先使用您的数据准备一个字符串

char matRow[100] = ""; // You can calculate how much memory u need, but for debug prints just put a big enough number

Mat_<int> trainingLabels(1,10);
trainingLabels << 0, 0, 0, 1, 1, 1, 0, 1, 1, 1;

for (int i = 0; i < 10; i++) {
    sprintf(matRow + strlen(matRow), "%d ", trainingLabels.at<int>(i)); // You can use data from row you need by accessing trainingLabels.row(...).data
}

android_log_print(ANDROID_LOG_ERROR, "SEARCH FOR THIS TAG", "%s", matRow);

在你的logcat中查找标签,在我的例子中是“搜索此标签”

关于它如何存储在Mat对象中的另一个问题 - 因为你用int类型创建了Mat - Mat.data是int数组,你可以很容易地看到这样的东西:

char matRow[100] = ""; // You can calculate how much memory u need, but for debug prints just put a big enough number

Mat_<int> trainingLabels(1,10);
trainingLabels << 0, 0, 0, 1, 1, 1, 0, 1, 1, 1;

int * data = (int*)trainingLabels.data;

for (int i = 0; i < 10; i++) {
    sprintf(matRow + strlen(matRow), "%d ", data[i]); // You can use data from row you need by accessing trainingLabels.row(...).data
}
android_log_print(ANDROID_LOG_ERROR, "SEARCH FOR THIS TAG", "%s", matRow);

以上是关于使用__android_log_print打印Opencv Mat,Android NDK的内容的主要内容,如果未能解决你的问题,请参考以下文章

OpenSL的使用

OP-TEE笔记之OPTEE__OS文件结构

18/10/05-5-BugKu-逆向-LittleRotatorGame(NJCTF)

如何在 Android 中通过 FFmpeg 解码音频

根据列表中的数据框创建数据框,并在R中的列中包含最大值

为啥我的程序在 for 循环中返回 None?