我有一个本机 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,但这并没有多大意义。