我被指派在紧迫的截止日期前做一些申请。为了及时完成它,我选择使用Java,因为我比C ++更有经验(我需要使用OpenCV库)。
一切都很顺利,我几乎完成了我的应用程序,除了我错过了一个使用OpenCV中的applyColorMap函数的行,当时我注意到它在OpenCV Java上不存在。由于我一直在处理包装器一段时间(从C ++到C#使用Unmanaged Wrappers)我决定自己包装该函数,但它让我断言失败。
这是我的代码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 ++中使用该函数,即使两个提供的对象相同,它也能很好地工作,但由于某些原因,我的包装器不起作用。
谢谢!