JNI断言失败

时间:2015-01-23 02:02:53

标签: java opencv java-native-interface

我被指派在紧迫的截止日期前做一些申请。为了及时完成它,我选择使用Java,因为我比C ++更有经验(我需要使用OpenCV库)。

一切都很顺利,我几乎完成了我的应用程序,除了我错过了一个使用OpenCV中的applyColorMap函数的行,当时我注意到它在OpenCV Java上不存在。由于我一直在处理包装器一段时间(从C ++到C#使用Unmanaged Wrappers)我决定自己包装该函数,但它让我断言失败Assertion Failed

这是我的代码Java代码:

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 ++中使用该函数,即使两个提供的对象相同,它也能很好地工作,但由于某些原因,我的包装器不起作用。

谢谢!

0 个答案:

没有答案