diff --git a/modules/java/android_test/src/org/opencv/test/features2d/SURFFeatureDetectorTest.java b/modules/java/android_test/src/org/opencv/test/features2d/SURFFeatureDetectorTest.java index b176a6a327f28911fdab8fb947079cf22c681b19..c3a983dde9461dd8eea18c73a1d2d6699dcabd47 100644 --- a/modules/java/android_test/src/org/opencv/test/features2d/SURFFeatureDetectorTest.java +++ b/modules/java/android_test/src/org/opencv/test/features2d/SURFFeatureDetectorTest.java @@ -96,6 +96,28 @@ public class SURFFeatureDetectorTest extends OpenCVTestCase { assertListKeyPointEquals(Arrays.asList(truth), keypoints, EPS); } + public void testDetectListOfMatListOfListOfKeyPoint() { + String filename = OpenCVTestRunner.getTempFileName("yml"); + writeFile(filename, "%YAML:1.0\nhessianThreshold: 8000.\noctaves: 3\noctaveLayers: 4\nupright: 0\n"); + detector.read(filename); + + List> keypoints = new ArrayList>(); + Mat cross = getTestImg(); + List crosses = new ArrayList(3); + crosses.add(cross); + crosses.add(cross); + crosses.add(cross); + + detector.detect(crosses, keypoints); + + assertEquals(3, keypoints.size()); + + for(List lkp : keypoints) { + order(lkp); + assertListKeyPointEquals(Arrays.asList(truth), lkp, EPS); + } + } + public void testEmpty() { assertFalse(detector.empty()); } diff --git a/modules/java/gen_java.py b/modules/java/gen_java.py index f676b52b779ca8efbc9e3f620c7d8f6f306528fc..3ff9ffcae6c83fc07b2708682aae13d55b301a73 100644 --- a/modules/java/gen_java.py +++ b/modules/java/gen_java.py @@ -200,6 +200,10 @@ type_dict = { "vector_float" : { "j_type" : "List", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "vector %(n)s", "suffix" : "J" }, "vector_double" : { "j_type" : "List", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "vector %(n)s", "suffix" : "J" }, + "vector_vector_KeyPoint":{ "j_type" : "List>", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "vector< vector > %(n)s" }, + "vector_vector_DMatch" : { "j_type" : "List>", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "vector< vector > %(n)s" }, + "vector_vector_char" : { "j_type" : "List>", "jn_type" : "long", "jni_type" : "jlong", "jni_var" : "vector< vector > %(n)s" }, + "Mat" : { "j_type" : "Mat", "jn_type" : "long", "jn_args" : (("__int64", ".nativeObj"),), "jni_var" : "Mat& %(n)s = *((Mat*)%(n)s_nativeObj)", "jni_type" : "jlong", #"jni_name" : "*%(n)s", @@ -668,7 +672,7 @@ public class %(jc)s { # class props for p in decl[3]: - if "vector" not in p[0]: + if True: #"vector" not in p[0]: classinfo.props.append( ClassPropInfo(p) ) else: print "Skipped property: [%s]" % name, p diff --git a/modules/java/src/cpp/converters.cpp b/modules/java/src/cpp/converters.cpp index e2fa441139810bef5ae068c9c8d214c3ae70f03e..0416465adb55b32c98b69fb23420d4b0b0006f08 100644 --- a/modules/java/src/cpp/converters.cpp +++ b/modules/java/src/cpp/converters.cpp @@ -263,3 +263,81 @@ void vector_DMatch_to_Mat(vector& v_dm, Mat& mat) mat.at< Vec >(i, 0) = Vec(dm.queryIdx, dm.trainIdx, dm.imgIdx, dm.distance); } } + +void Mat_to_vector_vector_KeyPoint(Mat& mat, vector< vector< KeyPoint > >& vv_kp) +{ + vector vm; + vm.reserve( mat.rows ); + Mat_to_vector_Mat(mat, vm); + for(size_t i=0; i vkp; + Mat_to_vector_KeyPoint(vm[i], vkp); + vv_kp.push_back(vkp); + } +} + +void vector_vector_KeyPoint_to_Mat(vector< vector< KeyPoint > >& vv_kp, Mat& mat) +{ + vector vm; + vm.reserve( vv_kp.size() ); + for(size_t i=0; i >& vv_dm) +{ + vector vm; + vm.reserve( mat.rows ); + Mat_to_vector_Mat(mat, vm); + for(size_t i=0; i vdm; + Mat_to_vector_DMatch(vm[i], vdm); + vv_dm.push_back(vdm); + } +} + +void vector_vector_DMatch_to_Mat(vector< vector< DMatch > >& vv_dm, Mat& mat) +{ + vector vm; + vm.reserve( vv_dm.size() ); + for(size_t i=0; i >& vv_ch) +{ + vector vm; + vm.reserve( mat.rows ); + Mat_to_vector_Mat(mat, vm); + for(size_t i=0; i vch; + Mat_to_vector_char(vm[i], vch); + vv_ch.push_back(vch); + } +} + +void vector_vector_char_to_Mat(vector< vector< char > >& vv_ch, Mat& mat) +{ + vector vm; + vm.reserve( vv_ch.size() ); + for(size_t i=0; i& v_mat, cv::Mat& mat); void Mat_to_vector_DMatch(cv::Mat& mat, std::vector& v_dm); void vector_DMatch_to_Mat(std::vector& v_dm, cv::Mat& mat); + +void Mat_to_vector_vector_KeyPoint(cv::Mat& mat, std::vector< std::vector< cv::KeyPoint > >& vv_kp); +void vector_vector_KeyPoint_to_Mat(std::vector< std::vector< cv::KeyPoint > >& vv_kp, cv::Mat& mat); + +void Mat_to_vector_vector_DMatch(cv::Mat& mat, std::vector< std::vector< cv::DMatch > >& vv_dm); +void vector_vector_DMatch_to_Mat(std::vector< std::vector< cv::DMatch > >& vv_dm, cv::Mat& mat); + +void Mat_to_vector_vector_char(cv::Mat& mat, std::vector< std::vector< char > >& vv_ch); +void vector_vector_char_to_Mat(std::vector< std::vector< char > >& vv_ch, cv::Mat& mat); diff --git a/modules/java/src/java/utils+Converters.java b/modules/java/src/java/utils+Converters.java index 005a1f0dc6f76ba9bc95e3980144380e4849ffb3..ab691ac542c2b01a60d3941684452ad095b8abd8 100644 --- a/modules/java/src/java/utils+Converters.java +++ b/modules/java/src/java/utils+Converters.java @@ -1,5 +1,6 @@ package org.opencv.utils; +import java.util.ArrayList; import java.util.List; import org.opencv.core.Mat; @@ -474,6 +475,36 @@ public class Converters { } } + // vector_vector_KeyPoint + public static Mat vector_vector_KeyPoint_to_Mat(List> kps) { + Mat res; + int lCount = (kps!=null) ? kps.size() : 0; + if(lCount>0){ + List mats = new ArrayList(lCount); + for(List lkp: kps) mats.add( vector_KeyPoint_to_Mat(lkp) ); + res = vector_Mat_to_Mat(mats); + } else { + res = new Mat(); + } + return res; + } + + public static void Mat_to_vector_vector_KeyPoint(Mat m, List> kps) { + if(kps == null) + throw new java.lang.IllegalArgumentException("Output List can't be null"); + + if(m == null) + throw new java.lang.IllegalArgumentException("Input Mat can't be null"); + + List mats = new ArrayList(m.rows()); + Mat_to_vector_Mat(m, mats); + List lkp = new ArrayList(); + for(Mat mi : mats) { + Mat_to_vector_KeyPoint(mi, lkp); + kps.add(lkp); + } + } + public static Mat vector_double_to_Mat(List ds) { Mat res; @@ -528,4 +559,65 @@ public class Converters { } } + +// vector_vector_DMatch +public static Mat vector_vector_DMatch_to_Mat(List> lldm) { + Mat res; + int lCount = (lldm!=null) ? lldm.size() : 0; + if(lCount>0){ + List mats = new ArrayList(lCount); + for(List ldm: lldm) mats.add( vector_DMatch_to_Mat(ldm) ); + res = vector_Mat_to_Mat(mats); + } else { + res = new Mat(); + } + return res; +} + +public static void Mat_to_vector_vector_DMatch(Mat m, List> lldm) { + if(lldm == null) + throw new java.lang.IllegalArgumentException("Output List can't be null"); + + if(m == null) + throw new java.lang.IllegalArgumentException("Input Mat can't be null"); + + List mats = new ArrayList(m.rows()); + Mat_to_vector_Mat(m, mats); + List ldm = new ArrayList(); + for(Mat mi : mats) { + Mat_to_vector_DMatch(mi, ldm); + lldm.add(ldm); + } +} + +//vector_vector_char +public static Mat vector_vector_char_to_Mat(List> llb) { + Mat res; + int lCount = (llb!=null) ? llb.size() : 0; + if(lCount>0){ + List mats = new ArrayList(lCount); + for(List lb: llb) mats.add( vector_char_to_Mat(lb) ); + res = vector_Mat_to_Mat(mats); + } else { + res = new Mat(); + } + return res; +} + +public static void Mat_to_vector_vector_char(Mat m, List> llb) { + if(llb == null) + throw new java.lang.IllegalArgumentException("Output List can't be null"); + + if(m == null) + throw new java.lang.IllegalArgumentException("Input Mat can't be null"); + + List mats = new ArrayList(m.rows()); + Mat_to_vector_Mat(m, mats); + List lb = new ArrayList(); + for(Mat mi : mats) { + Mat_to_vector_char(mi, lb); + llb.add(lb); + } +} + }