Java API generator: KeyPoint converters from/to Mat
authorAndrey Pavlenko <no@email>
Wed, 27 Jul 2011 15:16:24 +0000 (15:16 +0000)
committerAndrey Pavlenko <no@email>
Wed, 27 Jul 2011 15:16:24 +0000 (15:16 +0000)
modules/java/gen_java.py
modules/java/src/cpp/converters.cpp
modules/java/src/java/Converters.java
modules/java/src/java/features2d+KeyPoint.java

index 5640102..dae412e 100644 (file)
@@ -11,7 +11,7 @@ class_ignore_list = (
     "FileNode", "FileStorage",\r
     #highgui\r
     "VideoWriter", "VideoCapture",\r
-    #feature2d\r
+    #features2d\r
     "KeyPoint",\r
 )\r
 \r
index bc768d4..94716e5 100644 (file)
@@ -114,17 +114,27 @@ void vector_Point_to_Mat(vector<Point>& v_point, Mat& mat)
 //vector_KeyPoint\r
 void Mat_to_vector_KeyPoint(Mat& mat, vector<KeyPoint>& v_kp)\r
 {\r
-       v_kp.clear();\r
-       //CHECK_MAT(mat.type()!= ??? || mat.rows!=1);\r
-       v_kp = (vector<KeyPoint>) mat;\r
+    v_kp.clear();\r
+    CHECK_MAT(mat.type()!= CV_64FC(7) || mat.rows!=1);\r
+       for(int i=0; i<mat.cols; i++)\r
+       {\r
+               Vec<double, 7> v = mat.at< Vec<double, 7> >(0, i);\r
+               KeyPoint kp((float)v[0], (float)v[1], (float)v[2], (float)v[3], (float)v[4], (int)v[5], (int)v[6]);\r
+               v_kp.push_back(kp);\r
+       }\r
     return;\r
 }\r
 \r
 \r
 void vector_KeyPoint_to_Mat(vector<KeyPoint>& v_kp, Mat& mat)\r
 {\r
-       mat = Mat(v_kp);\r
-    return;\r
+       int count = v_kp.size();\r
+       mat.create(1, count, CV_64FC(7));\r
+       for(int i=0; i<count; i++)\r
+       {\r
+               KeyPoint kp = v_kp[i];\r
+               mat.at< Vec<double, 7> >(0, i) = Vec<double, 7>(kp.pt.x, kp.pt.y, kp.size, kp.angle, kp.response, kp.octave, kp.class_id);\r
+       }\r
 }\r
 \r
 \r
@@ -154,5 +164,4 @@ void vector_Mat_to_Mat(std::vector<cv::Mat>& v_mat, cv::Mat& mat)
                long long addr = (long long) new Mat(v_mat[i]);\r
                mat.at< Vec<int, 2> >(0, i) = Vec<int, 2>(addr>>32, addr&0xffffffff);\r
        }\r
-    return;\r
 }\r
index 177fb99..d8e081c 100644 (file)
@@ -9,7 +9,7 @@ import org.opencv.core.Rect;
 import org.opencv.features2d.KeyPoint;\r
 \r
 public class Converters {\r
-    \r
+\r
     public static Mat vector_Point_to_Mat(List<Point> pts) {\r
         Mat res;\r
         int count = (pts!=null) ? pts.size() : 0;\r
@@ -52,7 +52,7 @@ public class Converters {
         int cols = m.cols();\r
         if(CvType.CV_32SC2 != m.type() ||  m.rows()!=1 )\r
             throw new java.lang.IllegalArgumentException();\r
-        \r
+\r
         pts.clear();\r
         int[] buff = new int[2*cols];\r
         m.get(0, 0, buff);\r
@@ -85,7 +85,7 @@ public class Converters {
         int cols = m.cols();\r
         if(CvType.CV_32SC2 != m.type() ||  m.rows()!=1 )\r
             throw new java.lang.IllegalArgumentException();\r
-        \r
+\r
         mats.clear();\r
         int[] buff = new int[cols*2];\r
         m.get(0, 0, buff);\r
@@ -95,10 +95,6 @@ public class Converters {
         }\r
     }\r
 \r
-    public static void Mat_to_vector_KeyPoint(Mat kp_mat, List<KeyPoint> kps) {\r
-        // TODO Auto-generated method stub\r
-    }\r
-\r
     public static Mat vector_float_to_Mat(List<Float> fs) {\r
         Mat res;\r
         int count = (fs!=null) ? fs.size() : 0;\r
@@ -122,7 +118,7 @@ public class Converters {
         int cols = m.cols();\r
         if(CvType.CV_32FC1 != m.type() ||  m.rows()!=1 )\r
             throw new java.lang.IllegalArgumentException();\r
-        \r
+\r
         fs.clear();\r
         float[] buff = new float[cols];\r
         m.get(0, 0, buff);\r
@@ -171,7 +167,7 @@ public class Converters {
         int cols = m.cols();\r
         if(CvType.CV_32SC1 != m.type() ||  m.rows()!=1 )\r
             throw new java.lang.IllegalArgumentException();\r
-        \r
+\r
         is.clear();\r
         int[] buff = new int[cols];\r
         m.get(0, 0, buff);\r
@@ -184,7 +180,7 @@ public class Converters {
         Mat res;\r
         int count = (rs!=null) ? rs.size() : 0;\r
         if(count>0){\r
-            res = new Mat(1, count, CvType.CV_32SC4); //Point can be saved into double[2]\r
+            res = new Mat(1, count, CvType.CV_32SC4);\r
             int[] buff = new int[4*count];\r
             for(int i=0; i<count; i++) {\r
                 Rect r = rs.get(i);\r
@@ -206,7 +202,7 @@ public class Converters {
         int cols = m.cols();\r
         if(CvType.CV_32SC4 != m.type() ||  m.rows()!=1 )\r
             throw new java.lang.IllegalArgumentException();\r
-        \r
+\r
         rs.clear();\r
         int[] buff = new int[4*cols];\r
         m.get(0, 0, buff);\r
@@ -215,6 +211,47 @@ public class Converters {
         }\r
     }\r
 \r
+\r
+    public static Mat vector_KeyPoint_to_Mat(List<KeyPoint> kps) {\r
+        Mat res;\r
+        int count = (kps!=null) ? kps.size() : 0;\r
+        if(count>0){\r
+            res = new Mat(1, count, CvType.CV_64FC(7));\r
+            double[] buff = new double[count * 7];\r
+            for(int i=0; i<count; i++) {\r
+                KeyPoint kp = kps.get(i);\r
+                buff[7*i  ]   = kp.pt.x;\r
+                buff[7*i+1]   = kp.pt.y;\r
+                buff[7*i+2]   = kp.size;\r
+                buff[7*i+3]   = kp.angle;\r
+                buff[7*i+4]   = kp.response;\r
+                buff[7*i+5]   = kp.octave;\r
+                buff[7*i+6]   = kp.class_id;\r
+            }\r
+            res.put(0, 0, buff);\r
+        } else {\r
+            res = new Mat();\r
+        }\r
+        return res;\r
+    }\r
+\r
+    public static void Mat_to_vector_KeyPoint(Mat m, List<KeyPoint> kps) {\r
+        if(kps == null)\r
+            throw new java.lang.IllegalArgumentException();\r
+        int cols = m.cols();\r
+        if(CvType.CV_64FC(7) != m.type() ||  m.rows()!=1 )\r
+            throw new java.lang.IllegalArgumentException();\r
+\r
+        kps.clear();\r
+        double[] buff = new double[7*cols];\r
+        m.get(0, 0, buff);\r
+        for(int i=0; i<cols; i++) {\r
+            kps.add( new KeyPoint( (float)buff[4*i], (float)buff[4*i+1], (float)buff[4*i+2], (float)buff[4*i+3],\r
+                                      (float)buff[4*i+4], (int)buff[4*i+5], (int)buff[4*i+6] ) );\r
+        }\r
+    }\r
+\r
+\r
     public static Mat vector_double_to_Mat(List<Double> ds) {\r
         Mat res;\r
         int count = (ds!=null) ? ds.size() : 0;\r
index 0b59812..9f3da1a 100644 (file)
@@ -5,18 +5,18 @@ import org.opencv.core.Point;
 //javadoc: KeyPoint\r
 public class KeyPoint {\r
        \r
-       //javadoc: KeyPoint::pt\r
-    Point pt;\r
-       //javadoc: KeyPoint::size\r
-    float size;\r
-       //javadoc: KeyPoint::angle\r
-    float angle;\r
-       //javadoc: KeyPoint::response\r
-    float response;\r
-       //javadoc: KeyPoint::octave\r
-    int octave;\r
-       //javadoc: KeyPoint::class_id\r
-    int class_id; \r
+    //javadoc: KeyPoint::pt\r
+    public Point pt;\r
+    //javadoc: KeyPoint::size\r
+    public float size;\r
+    //javadoc: KeyPoint::angle\r
+    public float angle;\r
+    //javadoc: KeyPoint::response\r
+    public float response;\r
+    //javadoc: KeyPoint::octave\r
+    public int octave;\r
+    //javadoc: KeyPoint::class_id\r
+    public int class_id; \r
 \r
     //javadoc: KeyPoint::KeyPoint(x, y, _size, _angle, _response, _octave, _class_id)\r
     public KeyPoint(float x, float y, float _size, float _angle, float _response, int _octave, int _class_id)\r