Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI断言失败_Java_Opencv_Java Native Interface - Fatal编程技术网

Java JNI断言失败

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

我被派去做一些截止日期很紧的申请。为了及时完成,我选择了使用java,因为我比C++更需要使用OpenCV库。 一切都很顺利,我几乎完成了我的应用程序,除了我遗漏了一行使用OpenCV中的applyColorMap函数,当时我注意到它在OpenCV Java上不存在。由于我用包装器使用C++来处理包装,所以我决定自己包装那个函数,但是它让我断言。 以下是我的代码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++中使用这个函数,即使两个提供的对象是相同的,它也很有用,但由于某种原因,我的包装不起作用。
谢谢

您是否绝对确定允许提供的两个对象相同?在文档中似乎没有这样说,但它确实说如果它们是同一个对象,那么目标将被创建,这可能会覆盖源。是的,我绝对肯定。我已经在C++代码中测试了这个函数,做了一个简单的程序,而且工作得很好。在C++中,工作很好,总是工作。在过去的三年里,我一直在使用OpenCV。