Java JNI断言失败
我被派去做一些截止日期很紧的申请。为了及时完成,我选择了使用java,因为我比C++更需要使用OpenCV库。 一切都很顺利,我几乎完成了我的应用程序,除了我遗漏了一行使用OpenCV中的applyColorMap函数,当时我注意到它在OpenCV Java上不存在。由于我用包装器使用C++来处理包装,所以我决定自己包装那个函数,但是它让我断言。 以下是我的代码Java代码:Java JNI断言失败,java,opencv,java-native-interface,Java,Opencv,Java Native Interface,我被派去做一些截止日期很紧的申请。为了及时完成,我选择了使用java,因为我比C++更需要使用OpenCV库。 一切都很顺利,我几乎完成了我的应用程序,除了我遗漏了一行使用OpenCV中的applyColorMap函数,当时我注意到它在OpenCV Java上不存在。由于我用包装器使用C++来处理包装,所以我决定自己包装那个函数,但是它让我断言。 以下是我的代码Java代码: public class CVPlusNative{ public static native void ap
public class CVPlusNative{
public static native void applyColorMapN(long srcAddr, long dstAddr, int colorMap);
}
public class CVPlus {
public final static int COLORMAP_AUTUMN = 0;
public final static int COLORMAP_BONE = 1;
public final static int COLORMAP_JET = 2;
public final static int COLORMAP_WINTER = 3;
public final static int COLORMAP_RAINBOW = 4;
public final static int COLORMAP_OCEAN = 5;
public final static int COLORMAP_SUMMER = 6;
public final static int COLORMAP_SPRING = 7;
public final static int COLORMAP_COOL = 8;
public final static int COLORMAP_HSV = 9;
public final static int COLORMAP_PINK = 10;
public final static int COLORMAP_HOT = 11;
public static void applyColorMap(Mat src, Mat dst, int colorMap)
{
applyColorMapN(src.nativeObj, dst.nativeObj, colorMap);
}
}
这是我的C++代码:
JNIEXPORT void JNICALL Java_nativelibrary_CVPlusNative_applyColorMapN(JNIEnv *env, jclass thisClass, jlong srcAddr, jlong dstAddr, jint colorMap)
{
cv::applyColorMap(*(cv::Mat*)srcAddr, *(cv::Mat*)dstAddr, (int)colorMap);
}
现在有一个奇怪的部分:如果提供的源和目标不是同一个对象,它可以正常工作,但是如果它们是,它会给我这个错误。我尝试在C++中使用这个函数,即使两个提供的对象是相同的,它也很有用,但由于某种原因,我的包装不起作用。
谢谢 您是否绝对确定允许提供的两个对象相同?在文档中似乎没有这样说,但它确实说如果它们是同一个对象,那么目标将被创建,这可能会覆盖源。是的,我绝对肯定。我已经在C++代码中测试了这个函数,做了一个简单的程序,而且工作得很好。在C++中,工作很好,总是工作。在过去的三年里,我一直在使用OpenCV。