diff --git a/modules/java/gen_java.py b/modules/java/gen_java.py index 847f2569a8..44b8959478 100644 --- a/modules/java/gen_java.py +++ b/modules/java/gen_java.py @@ -78,7 +78,7 @@ type_dict = { "Range" : { "j_type" : "Range", "jn_args" : (("int", ".start"), ("int", ".end")), "jni_var" : "cv::Range %(n)s(%(n)s_start, %(n)s_end)", "suffix" : "II"}, - "CvSlice" : { "j_type" : "Range", "jn_args" : (("int", ".start"), ("int", ".end")), + "CvSlice" : { "j_type" : "Range", "jn_args" : (("int", ".start"), ("int", ".end")), "jni_var" : "cv::Range %(n)s(%(n)s_start, %(n)s_end)", "suffix" : "II"}, "string" : { "j_type" : "java.lang.String", "jn_type" : "java.lang.String", @@ -93,6 +93,9 @@ type_dict = { "jni_type" : "jstring", "jni_name" : "n_%(n)s.c_str()", "jni_var" : 'const char* utf_%(n)s = env->GetStringUTFChars(%(n)s, 0); std::string n_%(n)s( utf_%(n)s ? utf_%(n)s : "" ); env->ReleaseStringUTFChars(%(n)s, utf_%(n)s)', "suffix" : "Ljava_lang_String_2"}, +"TermCriteria": { "j_type" : "TermCriteria", "jn_args" : (("int", ".type"), ("int", ".maxCount"), ("double", ".epsilon")), + "jni_var" : "TermCriteria %(n)s(%(n)s_type, %(n)s_maxCount, %(n)s_epsilon)", + "suffix" : "IID"}, } @@ -320,7 +323,7 @@ class JavaWrapperGenerator(object): if (mask != null) { maskNativeObj=mask.nativeObj; } - double resarr[] = n_minMaxLoc(src.nativeObj, maskNativeObj); + double resarr[] = n_minMaxLocManual(src.nativeObj, maskNativeObj); res.minVal=resarr[0]; res.maxVal=resarr[1]; res.minLoc.x=resarr[2]; @@ -332,7 +335,7 @@ class JavaWrapperGenerator(object): public static MinMaxLocResult minMaxLoc(Mat src) { return minMaxLoc(src, null); } - private static native double[] n_minMaxLoc(long src_nativeObj, long mask_nativeObj); + private static native double[] n_minMaxLocManual(long src_nativeObj, long mask_nativeObj); """ ) @@ -420,7 +423,7 @@ class JavaWrapperGenerator(object): if module == "core": self.cpp_code.write(\ """ -JNIEXPORT jdoubleArray JNICALL Java_org_opencv_core_n_1minMaxLoc +JNIEXPORT jdoubleArray JNICALL Java_org_opencv_core_n_1minMaxLocManual (JNIEnv* env, jclass cls, jlong src_nativeObj, jlong mask_nativeObj) { try { diff --git a/modules/java/src/java/TermCriteria.java b/modules/java/src/java/TermCriteria.java new file mode 100644 index 0000000000..855137e112 --- /dev/null +++ b/modules/java/src/java/TermCriteria.java @@ -0,0 +1,60 @@ +package org.opencv; + +//javadoc:TermCriteria +public class TermCriteria { + + public int type; + public int maxCount; + public double epsilon; + + public TermCriteria(int t, int c, double e) { + this.type = t; + this.maxCount = c; + this.epsilon = e; + } + + public TermCriteria() { + this(0, 0, 0.0); + } + + public TermCriteria(double[] vals) { + this(); + if(vals!=null) { + type = vals.length>0 ? (int)vals[0] : 0; + maxCount = vals.length>1 ? (int)vals[1] : 0; + epsilon = vals.length>2 ? (double)vals[2] : 0; + } + } + + public TermCriteria clone() { + return new TermCriteria(type, maxCount, epsilon); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(type); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(maxCount); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(epsilon); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof TermCriteria)) return false; + TermCriteria it = (TermCriteria) obj; + return type == it.type && maxCount == it.maxCount && epsilon== it.epsilon; + } + + @Override + public String toString() { + if (this == null) return "null"; + return "{ type: " + type + ", maxCount: " + maxCount + ", epsilon: " + epsilon + "}"; + } +}