获取NDK项目android studio中位于drawable的图像的绝对路径 我试图把图像路径传递给我的C++文件,用于将图像用于图像处理,但是我现在无法处理它。在我的主活动中,我得到了这样的路径: Uri path; String pathS; path = Uri.parse("android.resource://com.sfarbac.rtmatching/" + R.drawable.elli); pathS = path .toString(); 我通过这个路径到C++文件: nativeClass.detectAndMatch(_mRgba.getNativeObjAddr(), _trick.getNativeObjAddr(), pathS); JNIEXPORT jint JNICALL Java_com_sfarbac_rtmatching_nativeClass_detectAndMatch (JNIEnv *env, jclass obj, jlong addrRgba, jlong addrTrick, jstring path){ Mat& camPic = *(Mat*)addrRgba; Mat& camTric = *(Mat*)addrTrick; const jsize len = env->GetStringUTFLength(path); const char* strChars = env->GetStringUTFChars(path, (jboolean *)0); string Result(strChars, len); camTric = imread (Result.c_str(), CV_LOAD_IMAGE_GRAYSCALE); if(! camTric.data ) { __android_log_print(ANDROID_LOG_ERROR, "TRACKERS", "%s", "Can not load image"); //return -1; } //cvtColor(camTric, camPic, CV_RGBA2GRAY); env->ReleaseStringUTFChars(path, strChars); return 1;
我从本机代码中获取路径信息,如下所示:获取NDK项目android studio中位于drawable的图像的绝对路径 我试图把图像路径传递给我的C++文件,用于将图像用于图像处理,但是我现在无法处理它。在我的主活动中,我得到了这样的路径: Uri path; String pathS; path = Uri.parse("android.resource://com.sfarbac.rtmatching/" + R.drawable.elli); pathS = path .toString(); 我通过这个路径到C++文件: nativeClass.detectAndMatch(_mRgba.getNativeObjAddr(), _trick.getNativeObjAddr(), pathS); JNIEXPORT jint JNICALL Java_com_sfarbac_rtmatching_nativeClass_detectAndMatch (JNIEnv *env, jclass obj, jlong addrRgba, jlong addrTrick, jstring path){ Mat& camPic = *(Mat*)addrRgba; Mat& camTric = *(Mat*)addrTrick; const jsize len = env->GetStringUTFLength(path); const char* strChars = env->GetStringUTFChars(path, (jboolean *)0); string Result(strChars, len); camTric = imread (Result.c_str(), CV_LOAD_IMAGE_GRAYSCALE); if(! camTric.data ) { __android_log_print(ANDROID_LOG_ERROR, "TRACKERS", "%s", "Can not load image"); //return -1; } //cvtColor(camTric, camPic, CV_RGBA2GRAY); env->ReleaseStringUTFChars(path, strChars); return 1;,android,c++,image,android-ndk,Android,C++,Image,Android Ndk,我从本机代码中获取路径信息,如下所示: nativeClass.detectAndMatch(_mRgba.getNativeObjAddr(), _trick.getNativeObjAddr(), pathS); JNIEXPORT jint JNICALL Java_com_sfarbac_rtmatching_nativeClass_detectAndMatch (JNIEnv *env, jclass obj, jlong addrRgba, jlong addrTrick,
nativeClass.detectAndMatch(_mRgba.getNativeObjAddr(), _trick.getNativeObjAddr(), pathS);
JNIEXPORT jint JNICALL
Java_com_sfarbac_rtmatching_nativeClass_detectAndMatch
(JNIEnv *env, jclass obj, jlong addrRgba, jlong addrTrick, jstring path){
Mat& camPic = *(Mat*)addrRgba;
Mat& camTric = *(Mat*)addrTrick;
const jsize len = env->GetStringUTFLength(path);
const char* strChars = env->GetStringUTFChars(path, (jboolean *)0);
string Result(strChars, len);
camTric = imread (Result.c_str(), CV_LOAD_IMAGE_GRAYSCALE);
if(! camTric.data )
{
__android_log_print(ANDROID_LOG_ERROR, "TRACKERS", "%s", "Can not load image");
//return -1;
}
//cvtColor(camTric, camPic, CV_RGBA2GRAY);
env->ReleaseStringUTFChars(path, strChars);
return 1;
}
我不能在这里加载图像。我收到错误“无法加载图像”。
如果我将图像放在资产文件夹中,我知道我找不到它们,因为这些图像放在apk文件中。我如何克服这个问题。谢谢。资源和资产是开发机器上的文件。它们不是设备上的文件 我不清楚为什么用户在他们的设备上对预编译的图像执行图像处理会有用。在其他地方这样做似乎更有意义,比如在开发机器上。或者,对来自用户的图像执行图像处理,而不是预编译的图像 也就是说: