将mat从java发送到c++;jni安卓arm64-v8a 32/64位 我有一个问题,把java的nAbjutAdvices从C++传递到C++。 这是我的java代码,FiffdMaGeD是一个C++方法: Mat original = new Mat(), processed = new Mat(), res = new Mat(); Utils.bitmapToMat(bitmap[0], original); if(original.channels()>4){ return null; } Logger.d("before native imagetype "+ original.type()+" imagedepth "+original.depth()+" imagechannels "+original.channels()); Logger.d("before address "+original.getNativeObjAddr() ); return findBoardInImage(original.getNativeObjAddr());
c++方法将mat从java发送到c++;jni安卓arm64-v8a 32/64位 我有一个问题,把java的nAbjutAdvices从C++传递到C++。 这是我的java代码,FiffdMaGeD是一个C++方法: Mat original = new Mat(), processed = new Mat(), res = new Mat(); Utils.bitmapToMat(bitmap[0], original); if(original.channels()>4){ return null; } Logger.d("before native imagetype "+ original.type()+" imagedepth "+original.depth()+" imagechannels "+original.channels()); Logger.d("before address "+original.getNativeObjAddr() ); return findBoardInImage(original.getNativeObjAddr());,java,android,c++,android-ndk,java-native-interface,Java,Android,C++,Android Ndk,Java Native Interface,c++方法 JNIEXPORT void JNICALL Java_be_appwise_i3snap_1android_helpers_I3ImageProcessor_extractForeground(JNIEnv *env,jlong res) { cv::Mat *resMat = (cv::Mat *) res; __android_log_print(ANDROID_LOG_ERROR,"extractforeground ","voo
JNIEXPORT void JNICALL Java_be_appwise_i3snap_1android_helpers_I3ImageProcessor_extractForeground(JNIEnv *env,jlong res) {
cv::Mat *resMat = (cv::Mat *) res;
__android_log_print(ANDROID_LOG_ERROR,"extractforeground ","voor eigen functie col %d rows %d");
*resMat=ImageProcessor::extractForeground(*resMat);
__android_log_print(ANDROID_LOG_ERROR,"extractforeground","na eigen functie col %d rows %d");
}
工作:
32位armeabi-v7a
oneplus x、one plus one、三星galaxy s4、索尼experia m2和一台旧三星平板电脑
不工作:
arm64-v8a
华为、三星s6、nexus 6p
这个mat有随机数的类型和随机数的通道,这让我相信long是32位的,但被解释为64位的,因此getchannel和gettype函数比它们应该的大得多。我自己解决了它,在gradle中添加了这个 我确实注意到一些性能问题。64位设备的速度比32位设备慢得多
ndk {
moduleName "ndksetup"
abiFilters "armeabi-v7a"
}
当你在GrADLE中导入库并且包含64位版本时,它将忽略所有其他32个版本的库,这就是为什么我的java是32位,而C++试图理解它为64位
也请检查此链接
嘿,伙计们,我解决了。