在NDK Android studio中将char *转换为cv :: Mat

时间:2017-12-16 14:29:00

标签: android c++ opencv android-ndk opencv-mat

我有一个原生的C ++方法,我用它来读取一个名为“hi.jpg”的图像。下面的代码找到资产,并将数据加载到char *缓冲区中。 (我已尝试过其他方法,如imread(),但未找到该文件)。然后我想将这些数据更改为Mat格式,所以我按照一些指令将char *缓冲区放入std :: vector,然后使用cv :: imdecode将数据转换为Mat。

JNIEXPORT jint JNICALL Java_com_example_user_application_MainActivity_generateAssets(JNIEnv* env,jobject thiz,jobject assetManager) {

AAsset* img;

AAssetManager *mgr = AAssetManager_fromJava(env, assetManager);
AAssetDir* assetDir = AAssetManager_openDir(mgr, "");
const char* filename;

while ((filename = AAssetDir_getNextFileName(assetDir)) != NULL) {
    AAsset *asset = AAssetManager_open(mgr, filename, AASSET_MODE_UNKNOWN);

    if(strcmp(filename, "hi.jpg")==0 ) {
        img = asset;
    }
}

long sizeOfImg = AAsset_getLength(img);
char* buffer = (char*) malloc (sizeof(char)*sizeOfImg);
AAsset_read(img, buffer, sizeOfImg);

std::vector<char> data(buffer, buffer + strlen(buffer));

cv::Mat dataToMat = cv::imdecode(data, IMREAD_UNCHANGED);


return 0;
}

我的问题是我不知道如何测试数据是否已成功转换为Mat。我该怎么测试呢?我已经运行了调试器并检查了dataToMat,但它没有多大意义。

0 个答案:

没有答案