[sikuli] 99/385: switch to OpenCV 2.4.8

Gilles Filippini pini at moszumanska.debian.org
Sun Jun 29 19:25:54 UTC 2014


This is an automated email from the git hooks/post-receive script.

pini pushed a commit to tag upstream/1.1.0_beta1
in repository sikuli.

commit 6d8cee4c3f38b0bf3d38fbe356886b325d21ddb2
Author: Raimund Hocke <info at its-me-raiman.de>
Date:   Fri Jan 3 15:33:20 2014 +0100

    switch to OpenCV 2.4.8
---
 API/src/main/java/org/sikuli/script/Image.java     |  72 +-
 .../java/org/sikuli/basics/ResourceLoader.java     |  10 +-
 .../src/main/java/org/sikuli/basics/Settings.java  |  19 +-
 Libs/build/mac/runBuildVisionProxy.sh              |   2 +-
 .../libs/mac/libs64/libMacHotkeyManager.dylib      | Bin 18476 -> 17088 bytes
 .../META-INF/libs/mac/libs64/libMacUtil.dylib      | Bin 15428 -> 14740 bytes
 .../META-INF/libs/mac/libs64/libVisionProxy.dylib  | Bin 411992 -> 435168 bytes
 .../libs/mac/libs64/libopencv_java247.dylib        | Bin 6386804 -> 0 bytes
 .../libs/mac/libs64/libopencv_java248.dylib        | Bin 0 -> 6947956 bytes
 .../java/org/sikuli/natives/DebugCategories.java   |   2 +-
 .../main/java/org/sikuli/natives/FindInput.java    |   2 +-
 .../main/java/org/sikuli/natives/FindResult.java   |   2 +-
 .../main/java/org/sikuli/natives/FindResults.java  |   2 +-
 Natives/src/main/java/org/sikuli/natives/Mat.java  |   2 +-
 Natives/src/main/java/org/sikuli/natives/OCR.java  |   2 +-
 .../src/main/java/org/sikuli/natives/OCRChar.java  |   2 +-
 .../src/main/java/org/sikuli/natives/OCRChars.java |   2 +-
 .../src/main/java/org/sikuli/natives/OCRLine.java  |   2 +-
 .../src/main/java/org/sikuli/natives/OCRLines.java |   2 +-
 .../main/java/org/sikuli/natives/OCRParagraph.java |   2 +-
 .../java/org/sikuli/natives/OCRParagraphs.java     |   2 +-
 .../src/main/java/org/sikuli/natives/OCRRect.java  |   2 +-
 .../src/main/java/org/sikuli/natives/OCRText.java  |   2 +-
 .../src/main/java/org/sikuli/natives/OCRWord.java  |   2 +-
 .../src/main/java/org/sikuli/natives/OCRWords.java |   2 +-
 .../main/java/org/sikuli/natives/TARGET_TYPE.java  |   2 +-
 .../src/main/java/org/sikuli/natives/Vision.java   |   2 +-
 .../main/java/org/sikuli/natives/VisionProxy.java  |   2 +-
 .../java/org/sikuli/natives/VisionProxyJNI.java    |   2 +-
 Natives/src/main/native/Vision/visionJAVA_wrap.cxx |   2 +-
 .../src/main/resources/org/opencv/core/Core.class  | Bin 44102 -> 44102 bytes
 .../src/main/resources/org/opencv/core/Core.java   |  10 +-
 .../opencv/features2d/DescriptorExtractor.class    | Bin 0 -> 3539 bytes
 .../org/opencv/features2d/DescriptorExtractor.java | 279 +++++++
 .../org/opencv/features2d/DescriptorMatcher.class  | Bin 0 -> 7843 bytes
 .../org/opencv/features2d/DescriptorMatcher.java   | 750 ++++++++++++++++++
 .../org/opencv/features2d/FeatureDetector.class    | Bin 0 -> 4620 bytes
 .../org/opencv/features2d/FeatureDetector.java     | 303 ++++++++
 .../org/opencv/features2d/Features2d.class         | Bin 0 -> 4994 bytes
 .../org/opencv/features2d/Features2d.java          | 402 ++++++++++
 .../features2d/GenericDescriptorMatcher.class      | Bin 0 -> 10691 bytes
 .../features2d/GenericDescriptorMatcher.java       | 861 +++++++++++++++++++++
 .../resources/org/opencv/features2d/KeyPoint.class | Bin 1881 -> 1881 bytes
 .../resources/org/opencv/features2d/KeyPoint.java  |  85 ++
 .../main/resources/org/opencv/gpu/DeviceInfo.class | Bin 0 -> 2464 bytes
 .../main/resources/org/opencv/gpu/DeviceInfo.java  | 231 ++++++
 OpenCV/src/main/resources/org/opencv/gpu/Gpu.class | Bin 0 -> 1739 bytes
 OpenCV/src/main/resources/org/opencv/gpu/Gpu.java  | 121 +++
 .../resources/org/opencv/gpu/TargetArchs.class     | Bin 0 -> 1664 bytes
 .../main/resources/org/opencv/gpu/TargetArchs.java | 132 ++++
 .../resources/org/opencv/highgui/Highgui.class     | Bin 8296 -> 8762 bytes
 .../main/resources/org/opencv/highgui/Highgui.java |   7 +
 .../main/resources/org/opencv/imgproc/Imgproc.java |   4 +-
 53 files changed, 3251 insertions(+), 79 deletions(-)

diff --git a/API/src/main/java/org/sikuli/script/Image.java b/API/src/main/java/org/sikuli/script/Image.java
index 40b292a..b0d8fdb 100644
--- a/API/src/main/java/org/sikuli/script/Image.java
+++ b/API/src/main/java/org/sikuli/script/Image.java
@@ -54,9 +54,9 @@ import org.sikuli.natives.Vision;
  *
  */
 public class Image {
-  
+
   static {
-//    FileManager.loadLibrary("opencv_java247");
+//    FileManager.loadLibrary(Settings.libOpenCV);
   }
 
   private static String me = "Image";
@@ -100,13 +100,13 @@ public class Image {
   private int rowHd = 0;
   private int colWd = 0;
 
-  
+
 
   @Override
   public String toString() {
     return String.format(
             (imageName != null ? imageName : "__UNKNOWN__") + ": (%dx%d)", bwidth, bheight)
-            + (lastSeen == null ? "" : 
+            + (lastSeen == null ? "" :
             String.format(" seen at (%d, %d) with %.2f", lastSeen.x, lastSeen.y, lastScore));
   }
 
@@ -131,7 +131,7 @@ public class Image {
    * file ending .png is added if missing <br />
    * filename: ...url-path.../name[.png] is loaded from the url and and cached <br />
    * already loaded image with same url is reused (reference) and taken from cache
-   * 
+   *
    * @param imgName
    * @return the image
    */
@@ -146,8 +146,8 @@ public class Image {
   /**
    * create a new image from a buffered image<br />
    * can only be reused with the object reference
-   * 
-   * @param img 
+   *
+   * @param img
    */
   public Image(BufferedImage img) {
     this(img, null);
@@ -157,7 +157,7 @@ public class Image {
    * create a new image from a buffered image<br />
    * giving it a descriptive name for printout and logging <br />
    * can only be reused with the object reference
-   * 
+   *
    * @param img
    * @param name descriptive name
    */
@@ -176,8 +176,8 @@ public class Image {
   /**
    * create a new image from a Sikuli ScreenImage (captured)<br />
    * can only be reused with the object reference
-   * 
-   * @param img 
+   *
+   * @param img
    */
   public Image(ScreenImage img) {
     this(img.getImage(), null);
@@ -187,7 +187,7 @@ public class Image {
    * create a new image from a Sikuli ScreenImage (captured)<br />
    * giving it a descriptive name for printout and logging <br />
    * can only be reused with the object reference
-   * 
+   *
    * @param img
    * @param name descriptive name
    */
@@ -339,7 +339,7 @@ public class Image {
 
   /**
    * Internal Use: IDE: to get rid of cache entries at script close or save as
-   * 
+   *
    * @param bundlePath
    */
   public static void purge(String bundlePath) {
@@ -445,7 +445,7 @@ public class Image {
   }
 
   /**
-   * Get the image's descriptive name 
+   * Get the image's descriptive name
    *
    */
   public String getName() {
@@ -487,12 +487,12 @@ public class Image {
 
   /**
    * if the image was already found before
-   * @return the similarity score 
+   * @return the similarity score
    */
   public double getLastSeenScore() {
     return lastScore;
   }
-  
+
   /**
    * Internal Use: set the last seen info after a find
    * @param lastSeen
@@ -505,7 +505,7 @@ public class Image {
       group.addImageFacts(this, lastSeen, sim);
     }
   }
-  
+
   /**
    * create a sub image from this image
    * @param x
@@ -521,7 +521,7 @@ public class Image {
     g.dispose();
     return new Image(bi);
   }
-  
+
   /**
    * create a sub image from this image
    * @param part (the constants Region.XXX as used with region.get())
@@ -531,7 +531,7 @@ public class Image {
     Rectangle r = Region.getRectangle(0, 0, getSize().width, getSize().height, part);
     return getSub(r.x, r.y, r.width, r.height);
   }
-  
+
   /**
    * store info: this image is divided vertically into n even rows <br />
    * a preparation for using getRow()
@@ -541,7 +541,7 @@ public class Image {
   public Image setRows(int n) {
     return setRaster(n, 0);
   }
-  
+
   /**
    * store info: this image is divided horizontally into n even columns <br />
    * a preparation for using getCol()
@@ -549,9 +549,9 @@ public class Image {
    * @return the leftmost column
    */
   public Image setCols(int n) {
-    return setRaster(0, n);    
+    return setRaster(0, n);
   }
-  
+
   /**
    *
    * @return number of eventually defined rows in this image or 0
@@ -559,7 +559,7 @@ public class Image {
   public int getRows() {
     return rows;
   }
-  
+
   /**
    *
    * @return height of eventually defined rows in this image or 0
@@ -567,7 +567,7 @@ public class Image {
   public int getRowH() {
     return rowH;
   }
-  
+
   /**
    *
    * @return number of eventually defined columns in this image or 0
@@ -575,7 +575,7 @@ public class Image {
   public int getCols() {
     return cols;
   }
-  
+
   /**
    *
    * @return width of eventually defined columns in this image or 0
@@ -583,11 +583,11 @@ public class Image {
   public int getColW() {
     return colW;
   }
-  
+
   /**
    * store info: this image is divided into a raster of even cells <br />
    * a preparation for using getCell()
-   * @param r 
+   * @param r
    * @param c
    * @return the top left cell
    */
@@ -604,7 +604,7 @@ public class Image {
     }
     return getCell(0, 0);
   }
-  
+
   /**
    * get the specified row counting from 0, if rows or raster are setup
    * negative counts reverse from the end (last = -1)
@@ -623,7 +623,7 @@ public class Image {
     r = Math.min(r, rows-1);
     return getSub(0, r * rowH, getSize().width, rowH);
   }
-  
+
   /**
    * get the specified column counting from 0, if columns or raster are setup
    * negative counts reverse from the end (last = -1)
@@ -640,9 +640,9 @@ public class Image {
     }
     c = Math.max(0, c);
     c = Math.min(c, cols-1);
-    return getSub(c * colW, 0, colW, getSize().height);    
+    return getSub(c * colW, 0, colW, getSize().height);
   }
-  
+
   /**
    * get the specified cell counting from (0, 0), if a raster is setup <br />
    * negative counts reverse from the end (last = -1)
@@ -666,18 +666,18 @@ public class Image {
     r = Math.min(r, rows-1);
     c = Math.max(0, c);
     c = Math.min(c, cols-1);
-    return getSub(c * colW, r * rowH, colW, rowH);    
+    return getSub(c * colW, r * rowH, colW, rowH);
   }
-  
+
   /**
    * get the OpenCV Mat version of the image's BufferedImage
-   * 
+   *
    * @return OpenCV Mat
    */
   public Mat getMat() {
     return createMat(get());
   }
-  
+
   protected static Mat createMat(BufferedImage img) {
     if (img != null) {
       Debug timer = Debug.startTimer("Mat create\t (%d x %d) from \n%s", img.getWidth(), img.getHeight(), img);
@@ -711,7 +711,7 @@ public class Image {
 
   /**
    * to get old style OpenCV Mat for FindInput
-   * 
+   *
    * @return SWIG interfaced OpenCV Mat
    * @deprecated
    */
@@ -728,7 +728,7 @@ public class Image {
       return null;
     }
   }
-  
+
   protected static byte[] convertBufferedImageToByteArray(BufferedImage img) {
     if (img != null) {
       BufferedImage cvImg = createBufferedImage(img.getWidth(), img.getHeight());
diff --git a/Basics/src/main/java/org/sikuli/basics/ResourceLoader.java b/Basics/src/main/java/org/sikuli/basics/ResourceLoader.java
index 6595276..4dedc7a 100755
--- a/Basics/src/main/java/org/sikuli/basics/ResourceLoader.java
+++ b/Basics/src/main/java/org/sikuli/basics/ResourceLoader.java
@@ -39,7 +39,7 @@ public class ResourceLoader implements IResourceLoader {
     Debug.logx(level, "", me + ": " + message, args);
   }
   //</editor-fold>
-  
+
   private String loaderName = "basic";
   private static final String NL = String.format("%n");
   private static final String cmdRegCheck = "reg QUERY HKCU";
@@ -91,7 +91,7 @@ public class ResourceLoader implements IResourceLoader {
   private static String libSource32 = libSourcebase + "%s/libs32/";
   private static String libSource64 = libSourcebase + "%s/libs64/";
   private String libSource;
-  
+
   private String osarch;
   private String javahome;
 
@@ -200,7 +200,7 @@ public class ResourceLoader implements IResourceLoader {
         }
       }
 
-      //  Mac specific 
+      //  Mac specific
       if (Settings.isMac()) {
         if (!osarch.contains("64")) {
           log(-1, "Mac: only 64-Bit supported");
@@ -215,7 +215,7 @@ public class ResourceLoader implements IResourceLoader {
 //        }
       }
 
-      // Windows specific 
+      // Windows specific
       if (Settings.isWindows()) {
         if (osarch.contains("64")) {
           libSource = String.format(libSource64, "windows");
@@ -882,7 +882,7 @@ public class ResourceLoader implements IResourceLoader {
       }
     } else {
       String p = FileManager.slashify(jar.getPath(), false);
-      //TODO hack: to get folder Commands and Lib from Basics 
+      //TODO hack: to get folder Commands and Lib from Basics
       if (path.startsWith("Commands/") || path.startsWith("Lib/")) {
         p = p.replace("Natives", "Basics");
       }
diff --git a/Basics/src/main/java/org/sikuli/basics/Settings.java b/Basics/src/main/java/org/sikuli/basics/Settings.java
index 09278d0..36d5d2e 100644
--- a/Basics/src/main/java/org/sikuli/basics/Settings.java
+++ b/Basics/src/main/java/org/sikuli/basics/Settings.java
@@ -26,12 +26,12 @@ public class Settings {
     Debug.logx(level, level < 0 ? "error" : "debug",
             me + ": " + message, args);
   }
-  
+
   public static int breakPoint = 0;
   public static boolean handlesMacBundles = true;
   public static boolean runningSetup = false;
   private static final PreferencesUser prefs = PreferencesUser.getInstance();
-  
+
   /**
    * location of folder Tessdata
    */
@@ -75,22 +75,23 @@ public class Settings {
   public static String SikuliVersionIDE;
   public static String SikuliVersionScript;
   public static final String versionMonth = "January 2014";
-  
-  
+	public static final String libOpenCV = "libopencv_java248";
+
+
   /**
    * Resource types to be used with IResourceLoader implementations
    */
   public static final String SIKULI_LIB = "*sikuli_lib";
   public static String BaseTempPath;
   public static String UserName = "UnKnown";
-  
+
   public static String proxyName = prefs.get("ProxyName", null);
   public static String proxyIP = prefs.get("ProxyIP", null);
   public static InetAddress proxyAddress = null;
   public static String proxyPort = prefs.get("ProxyPort", null);
   public static boolean proxyChecked = false;
   public static Proxy proxy = null;
-  
+
   private static Preferences options = Preferences.userNodeForPackage(SikuliX.class);
 
   static {
@@ -116,7 +117,7 @@ public class Settings {
       SikuliVersionScript = SikuliVersionDefaultScript;
     }
   }
-  
+
   public static final int ISWINDOWS = 0;
   public static final int ISMAC = 1;
   public static final int ISLINUX = 2;
@@ -171,7 +172,7 @@ public class Settings {
   public static float SlowMotionDelay = 2.0f; // in seconds
   public static float MoveMouseDelay = 0.5f; // in seconds
   private static float MoveMouseDelaySaved = MoveMouseDelay;
-  
+
   /**
    * true = highlight every match (default: false) (show red rectangle around) for
    * DefaultHighlightTime seconds (default: 2)
@@ -263,7 +264,7 @@ public class Settings {
   public static boolean isLinux() {
     return getOS() == ISLINUX;
   }
-  
+
   public static boolean isMac() {
     return getOS() == ISMAC;
   }
diff --git a/Libs/build/mac/runBuildVisionProxy.sh b/Libs/build/mac/runBuildVisionProxy.sh
index 4cc5462..0600ac7 100644
--- a/Libs/build/mac/runBuildVisionProxy.sh
+++ b/Libs/build/mac/runBuildVisionProxy.sh
@@ -19,7 +19,7 @@ ijava=/System/Library/Frameworks/JavaVM.framework/Headers
 
 # modules the linker should know (have to be checked/adapted on your system)
 lnkTess=$DEVLIBS/libtesseract.3.dylib 
-lnkCVall=$DEVLIBS/libopencv_java247.dylib
+lnkCVall=$DEVLIBS/libopencv_java248.dylib
 
 # the compile steps
 echo -- cvgui
diff --git a/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacHotkeyManager.dylib b/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacHotkeyManager.dylib
index 1c714de..b11b5c5 100755
Binary files a/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacHotkeyManager.dylib and b/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacHotkeyManager.dylib differ
diff --git a/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacUtil.dylib b/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacUtil.dylib
index 09639ae..20881e5 100755
Binary files a/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacUtil.dylib and b/Libs/src/main/resources/META-INF/libs/mac/libs64/libMacUtil.dylib differ
diff --git a/Libs/src/main/resources/META-INF/libs/mac/libs64/libVisionProxy.dylib b/Libs/src/main/resources/META-INF/libs/mac/libs64/libVisionProxy.dylib
index bbbcd59..0b9ee18 100755
Binary files a/Libs/src/main/resources/META-INF/libs/mac/libs64/libVisionProxy.dylib and b/Libs/src/main/resources/META-INF/libs/mac/libs64/libVisionProxy.dylib differ
diff --git a/Libs/src/main/resources/META-INF/libs/mac/libs64/libopencv_java247.dylib b/Libs/src/main/resources/META-INF/libs/mac/libs64/libopencv_java247.dylib
deleted file mode 100755
index 25a3944..0000000
Binary files a/Libs/src/main/resources/META-INF/libs/mac/libs64/libopencv_java247.dylib and /dev/null differ
diff --git a/Libs/src/main/resources/META-INF/libs/mac/libs64/libopencv_java248.dylib b/Libs/src/main/resources/META-INF/libs/mac/libs64/libopencv_java248.dylib
new file mode 100755
index 0000000..9fe86ee
Binary files /dev/null and b/Libs/src/main/resources/META-INF/libs/mac/libs64/libopencv_java248.dylib differ
diff --git a/Natives/src/main/java/org/sikuli/natives/DebugCategories.java b/Natives/src/main/java/org/sikuli/natives/DebugCategories.java
index 727dbc5..66cd350 100644
--- a/Natives/src/main/java/org/sikuli/natives/DebugCategories.java
+++ b/Natives/src/main/java/org/sikuli/natives/DebugCategories.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/FindInput.java b/Natives/src/main/java/org/sikuli/natives/FindInput.java
index 739baa0..6f62269 100644
--- a/Natives/src/main/java/org/sikuli/natives/FindInput.java
+++ b/Natives/src/main/java/org/sikuli/natives/FindInput.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/FindResult.java b/Natives/src/main/java/org/sikuli/natives/FindResult.java
index 3f5df63..a713cf0 100644
--- a/Natives/src/main/java/org/sikuli/natives/FindResult.java
+++ b/Natives/src/main/java/org/sikuli/natives/FindResult.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/FindResults.java b/Natives/src/main/java/org/sikuli/natives/FindResults.java
index 4177904..d1e62dc 100644
--- a/Natives/src/main/java/org/sikuli/natives/FindResults.java
+++ b/Natives/src/main/java/org/sikuli/natives/FindResults.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/Mat.java b/Natives/src/main/java/org/sikuli/natives/Mat.java
index b4bc2e2..4e572c2 100644
--- a/Natives/src/main/java/org/sikuli/natives/Mat.java
+++ b/Natives/src/main/java/org/sikuli/natives/Mat.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCR.java b/Natives/src/main/java/org/sikuli/natives/OCR.java
index 6b4fbe0..7eab2a4 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCR.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCR.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRChar.java b/Natives/src/main/java/org/sikuli/natives/OCRChar.java
index d3289bf..dcb90db 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRChar.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRChar.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRChars.java b/Natives/src/main/java/org/sikuli/natives/OCRChars.java
index e1d0810..f2e3d63 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRChars.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRChars.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRLine.java b/Natives/src/main/java/org/sikuli/natives/OCRLine.java
index 55b119a..108488d 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRLine.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRLine.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRLines.java b/Natives/src/main/java/org/sikuli/natives/OCRLines.java
index ef81c54..1e22ecb 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRLines.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRLines.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRParagraph.java b/Natives/src/main/java/org/sikuli/natives/OCRParagraph.java
index d0ac51c..30156b8 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRParagraph.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRParagraph.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRParagraphs.java b/Natives/src/main/java/org/sikuli/natives/OCRParagraphs.java
index d52cb41..2cbcdd5 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRParagraphs.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRParagraphs.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRRect.java b/Natives/src/main/java/org/sikuli/natives/OCRRect.java
index 414c2e9..5bd7082 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRRect.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRRect.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRText.java b/Natives/src/main/java/org/sikuli/natives/OCRText.java
index b5e1244..fa2ab49 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRText.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRText.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRWord.java b/Natives/src/main/java/org/sikuli/natives/OCRWord.java
index 3a2f1b7..8202dba 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRWord.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRWord.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/OCRWords.java b/Natives/src/main/java/org/sikuli/natives/OCRWords.java
index 5bfa271..0354d8a 100644
--- a/Natives/src/main/java/org/sikuli/natives/OCRWords.java
+++ b/Natives/src/main/java/org/sikuli/natives/OCRWords.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/TARGET_TYPE.java b/Natives/src/main/java/org/sikuli/natives/TARGET_TYPE.java
index 4eb56ec..58450c1 100644
--- a/Natives/src/main/java/org/sikuli/natives/TARGET_TYPE.java
+++ b/Natives/src/main/java/org/sikuli/natives/TARGET_TYPE.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/Vision.java b/Natives/src/main/java/org/sikuli/natives/Vision.java
index 91ea42a..055cc81 100644
--- a/Natives/src/main/java/org/sikuli/natives/Vision.java
+++ b/Natives/src/main/java/org/sikuli/natives/Vision.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/VisionProxy.java b/Natives/src/main/java/org/sikuli/natives/VisionProxy.java
index 14390a1..e797a19 100644
--- a/Natives/src/main/java/org/sikuli/natives/VisionProxy.java
+++ b/Natives/src/main/java/org/sikuli/natives/VisionProxy.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/java/org/sikuli/natives/VisionProxyJNI.java b/Natives/src/main/java/org/sikuli/natives/VisionProxyJNI.java
index fb02fe3..1130de2 100644
--- a/Natives/src/main/java/org/sikuli/natives/VisionProxyJNI.java
+++ b/Natives/src/main/java/org/sikuli/natives/VisionProxyJNI.java
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  *
  * Do not make changes to this file unless you know what you are doing--modify
  * the SWIG interface file instead.
diff --git a/Natives/src/main/native/Vision/visionJAVA_wrap.cxx b/Natives/src/main/native/Vision/visionJAVA_wrap.cxx
index 77fa65d..a289a5e 100755
--- a/Natives/src/main/native/Vision/visionJAVA_wrap.cxx
+++ b/Natives/src/main/native/Vision/visionJAVA_wrap.cxx
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.10
+ * Version 2.0.7
  * 
  * This file is not intended to be easily readable and contains a number of 
  * coding conventions designed to improve portability and efficiency. Do not make
diff --git a/OpenCV/src/main/resources/org/opencv/core/Core.class b/OpenCV/src/main/resources/org/opencv/core/Core.class
index 23289b8..7a7128b 100644
Binary files a/OpenCV/src/main/resources/org/opencv/core/Core.class and b/OpenCV/src/main/resources/org/opencv/core/Core.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/core/Core.java b/OpenCV/src/main/resources/org/opencv/core/Core.java
index 3438102..c522a79 100644
--- a/OpenCV/src/main/resources/org/opencv/core/Core.java
+++ b/OpenCV/src/main/resources/org/opencv/core/Core.java
@@ -12,11 +12,11 @@ import org.opencv.utils.Converters;
 public class Core {
 
     // these constants are wrapped inside functions to prevent inlining
-    private static String getVersion() { return "2.4.7.0"; }
-    private static String getNativeLibraryName() { return "opencv_java247"; }
+    private static String getVersion() { return "2.4.8.0"; }
+    private static String getNativeLibraryName() { return "opencv_java248"; }
     private static int getVersionEpoch() { return 2; }
     private static int getVersionMajor() { return 4; }
-    private static int getVersionMinor() { return 7; }
+    private static int getVersionMinor() { return 8; }
     private static int getVersionRevision() { return 0; }
 
     public static final String VERSION = getVersion();
@@ -2372,7 +2372,7 @@ public class Core {
  * matrix of the same size as input. In case of 2D transform, it uses the packed
  * format as shown above. In case of a single 1D transform, it looks like the
  * first row of the matrix above. In case of multiple 1D transforms (when using
- * the <code>DCT_ROWS</code> flag), each row of the output matrix looks like the
+ * the <code>DFT_ROWS</code> flag), each row of the output matrix looks like the
  * first row of the matrix above.
  *   <li> If the input array is complex and either <code>DFT_INVERSE</code> or
  * <code>DFT_REAL_OUTPUT</code> are not set, the output is a complex array of
@@ -2635,7 +2635,7 @@ public class Core {
  * matrix of the same size as input. In case of 2D transform, it uses the packed
  * format as shown above. In case of a single 1D transform, it looks like the
  * first row of the matrix above. In case of multiple 1D transforms (when using
- * the <code>DCT_ROWS</code> flag), each row of the output matrix looks like the
+ * the <code>DFT_ROWS</code> flag), each row of the output matrix looks like the
  * first row of the matrix above.
  *   <li> If the input array is complex and either <code>DFT_INVERSE</code> or
  * <code>DFT_REAL_OUTPUT</code> are not set, the output is a complex array of
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/DescriptorExtractor.class b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorExtractor.class
new file mode 100644
index 0000000..24d0aeb
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorExtractor.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/DescriptorExtractor.java b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorExtractor.java
new file mode 100644
index 0000000..f187f60
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorExtractor.java
@@ -0,0 +1,279 @@
+
+//
+// This file is auto-generated. Please don't modify it!
+//
+package org.opencv.features2d;
+
+import java.lang.String;
+import java.util.ArrayList;
+import java.util.List;
+import org.opencv.core.Mat;
+import org.opencv.core.MatOfKeyPoint;
+import org.opencv.utils.Converters;
+
+// C++: class javaDescriptorExtractor
+/**
+ * <p>Abstract base class for computing descriptors for image keypoints.</p>
+ *
+ * <p>class CV_EXPORTS DescriptorExtractor <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>public:</p>
+ *
+ * <p>virtual ~DescriptorExtractor();</p>
+ *
+ * <p>void compute(const Mat& image, vector<KeyPoint>& keypoints,</p>
+ *
+ * <p>Mat& descriptors) const;</p>
+ *
+ * <p>void compute(const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints,</p>
+ *
+ * <p>vector<Mat>& descriptors) const;</p>
+ *
+ * <p>virtual void read(const FileNode&);</p>
+ *
+ * <p>virtual void write(FileStorage&) const;</p>
+ *
+ * <p>virtual int descriptorSize() const = 0;</p>
+ *
+ * <p>virtual int descriptorType() const = 0;</p>
+ *
+ * <p>static Ptr<DescriptorExtractor> create(const string& descriptorExtractorType);</p>
+ *
+ * <p>protected:...</p>
+ *
+ * <p>};</p>
+ *
+ * <p>In this interface, a keypoint descriptor can be represented as a </code></p>
+ *
+ * <p>dense, fixed-dimension vector of a basic type. Most descriptors follow this
+ * pattern as it simplifies computing distances between descriptors. Therefore,
+ * a collection of descriptors is represented as "Mat", where each row is a
+ * keypoint descriptor.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html#descriptorextractor">org.opencv.features2d.DescriptorExtractor : public Algorithm</a>
+ */
+public class DescriptorExtractor {
+
+    protected final long nativeObj;
+    protected DescriptorExtractor(long addr) { nativeObj = addr; }
+
+
+    private static final int
+            OPPONENTEXTRACTOR = 1000;
+
+
+    public static final int
+            SIFT = 1,
+            SURF = 2,
+            ORB = 3,
+            BRIEF = 4,
+            BRISK = 5,
+            FREAK = 6,
+            OPPONENT_SIFT = OPPONENTEXTRACTOR + SIFT,
+            OPPONENT_SURF = OPPONENTEXTRACTOR + SURF,
+            OPPONENT_ORB = OPPONENTEXTRACTOR + ORB,
+            OPPONENT_BRIEF = OPPONENTEXTRACTOR + BRIEF,
+            OPPONENT_BRISK = OPPONENTEXTRACTOR + BRISK,
+            OPPONENT_FREAK = OPPONENTEXTRACTOR + FREAK;
+
+
+    //
+    // C++:  void javaDescriptorExtractor::compute(Mat image, vector_KeyPoint& keypoints, Mat descriptors)
+    //
+
+/**
+ * <p>Computes the descriptors for a set of keypoints detected in an image (first
+ * variant) or image set (second variant).</p>
+ *
+ * @param image Image.
+ * @param keypoints Input collection of keypoints. Keypoints for which a
+ * descriptor cannot be computed are removed. Sometimes new keypoints can be
+ * added, for example: <code>SIFT</code> duplicates keypoint with several
+ * dominant orientations (for each orientation).
+ * @param descriptors Computed descriptors. In the second variant of the method
+ * <code>descriptors[i]</code> are descriptors computed for a <code>keypoints[i]".
+ * Row </code>j<code> is the </code>keypoints<code> (or </code>keypoints[i]<code>)
+ * is the descriptor for keypoint </code>j"-th keypoint.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html#descriptorextractor-compute">org.opencv.features2d.DescriptorExtractor.compute</a>
+ */
+    public  void compute(Mat image, MatOfKeyPoint keypoints, Mat descriptors)
+    {
+        Mat keypoints_mat = keypoints;
+        compute_0(nativeObj, image.nativeObj, keypoints_mat.nativeObj, descriptors.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorExtractor::compute(vector_Mat images, vector_vector_KeyPoint& keypoints, vector_Mat& descriptors)
+    //
+
+/**
+ * <p>Computes the descriptors for a set of keypoints detected in an image (first
+ * variant) or image set (second variant).</p>
+ *
+ * @param images Image set.
+ * @param keypoints Input collection of keypoints. Keypoints for which a
+ * descriptor cannot be computed are removed. Sometimes new keypoints can be
+ * added, for example: <code>SIFT</code> duplicates keypoint with several
+ * dominant orientations (for each orientation).
+ * @param descriptors Computed descriptors. In the second variant of the method
+ * <code>descriptors[i]</code> are descriptors computed for a <code>keypoints[i]".
+ * Row </code>j<code> is the </code>keypoints<code> (or </code>keypoints[i]<code>)
+ * is the descriptor for keypoint </code>j"-th keypoint.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html#descriptorextractor-compute">org.opencv.features2d.DescriptorExtractor.compute</a>
+ */
+    public  void compute(List<Mat> images, List<MatOfKeyPoint> keypoints, List<Mat> descriptors)
+    {
+        Mat images_mat = Converters.vector_Mat_to_Mat(images);
+        List<Mat> keypoints_tmplm = new ArrayList<Mat>((keypoints != null) ? keypoints.size() : 0);
+        Mat keypoints_mat = Converters.vector_vector_KeyPoint_to_Mat(keypoints, keypoints_tmplm);
+        Mat descriptors_mat = new Mat();
+        compute_1(nativeObj, images_mat.nativeObj, keypoints_mat.nativeObj, descriptors_mat.nativeObj);
+        Converters.Mat_to_vector_vector_KeyPoint(keypoints_mat, keypoints);
+        Converters.Mat_to_vector_Mat(descriptors_mat, descriptors);
+        return;
+    }
+
+
+    //
+    // C++: static javaDescriptorExtractor* javaDescriptorExtractor::create(int extractorType)
+    //
+
+/**
+ * <p>Creates a descriptor extractor by name.</p>
+ *
+ * <p>The current implementation supports the following types of a descriptor
+ * extractor:</p>
+ * <ul>
+ *   <li> <code>"SIFT"</code> -- "SIFT"
+ *   <li> <code>"SURF"</code> -- "SURF"
+ *   <li> <code>"BRIEF"</code> -- "BriefDescriptorExtractor"
+ *   <li> <code>"BRISK"</code> -- "BRISK"
+ *   <li> <code>"ORB"</code> -- "ORB"
+ *   <li> <code>"FREAK"</code> -- "FREAK"
+ * </ul>
+ *
+ * <p>A combined format is also supported: descriptor extractor adapter name
+ * (<code>"Opponent"</code> -- "OpponentColorDescriptorExtractor") + descriptor
+ * extractor name (see above), for example: <code>"OpponentSIFT"</code>.</p>
+ *
+ * @param extractorType a extractorType
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_extractors.html#descriptorextractor-create">org.opencv.features2d.DescriptorExtractor.create</a>
+ */
+    public static DescriptorExtractor create(int extractorType)
+    {
+
+        DescriptorExtractor retVal = new DescriptorExtractor(create_0(extractorType));
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  int javaDescriptorExtractor::descriptorSize()
+    //
+
+    public  int descriptorSize()
+    {
+
+        int retVal = descriptorSize_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  int javaDescriptorExtractor::descriptorType()
+    //
+
+    public  int descriptorType()
+    {
+
+        int retVal = descriptorType_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  bool javaDescriptorExtractor::empty()
+    //
+
+    public  boolean empty()
+    {
+
+        boolean retVal = empty_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  void javaDescriptorExtractor::read(string fileName)
+    //
+
+    public  void read(String fileName)
+    {
+
+        read_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorExtractor::write(string fileName)
+    //
+
+    public  void write(String fileName)
+    {
+
+        write_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    @Override
+    protected void finalize() throws Throwable {
+        delete(nativeObj);
+    }
+
+
+
+    // C++:  void javaDescriptorExtractor::compute(Mat image, vector_KeyPoint& keypoints, Mat descriptors)
+    private static native void compute_0(long nativeObj, long image_nativeObj, long keypoints_mat_nativeObj, long descriptors_nativeObj);
+
+    // C++:  void javaDescriptorExtractor::compute(vector_Mat images, vector_vector_KeyPoint& keypoints, vector_Mat& descriptors)
+    private static native void compute_1(long nativeObj, long images_mat_nativeObj, long keypoints_mat_nativeObj, long descriptors_mat_nativeObj);
+
+    // C++: static javaDescriptorExtractor* javaDescriptorExtractor::create(int extractorType)
+    private static native long create_0(int extractorType);
+
+    // C++:  int javaDescriptorExtractor::descriptorSize()
+    private static native int descriptorSize_0(long nativeObj);
+
+    // C++:  int javaDescriptorExtractor::descriptorType()
+    private static native int descriptorType_0(long nativeObj);
+
+    // C++:  bool javaDescriptorExtractor::empty()
+    private static native boolean empty_0(long nativeObj);
+
+    // C++:  void javaDescriptorExtractor::read(string fileName)
+    private static native void read_0(long nativeObj, String fileName);
+
+    // C++:  void javaDescriptorExtractor::write(string fileName)
+    private static native void write_0(long nativeObj, String fileName);
+
+    // native support for java finalize()
+    private static native void delete(long nativeObj);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/DescriptorMatcher.class b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorMatcher.class
new file mode 100644
index 0000000..8036890
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorMatcher.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/DescriptorMatcher.java b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorMatcher.java
new file mode 100644
index 0000000..e5cda74
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/features2d/DescriptorMatcher.java
@@ -0,0 +1,750 @@
+
+//
+// This file is auto-generated. Please don't modify it!
+//
+package org.opencv.features2d;
+
+import java.lang.String;
+import java.util.ArrayList;
+import java.util.List;
+import org.opencv.core.Mat;
+import org.opencv.core.MatOfDMatch;
+import org.opencv.utils.Converters;
+
+// C++: class javaDescriptorMatcher
+/**
+ * <p>Abstract base class for matching keypoint descriptors. It has two groups of
+ * match methods: for matching descriptors of an image with another image or
+ * with an image set.</p>
+ *
+ * <p>class DescriptorMatcher <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>public:</p>
+ *
+ * <p>virtual ~DescriptorMatcher();</p>
+ *
+ * <p>virtual void add(const vector<Mat>& descriptors);</p>
+ *
+ * <p>const vector<Mat>& getTrainDescriptors() const;</p>
+ *
+ * <p>virtual void clear();</p>
+ *
+ * <p>bool empty() const;</p>
+ *
+ * <p>virtual bool isMaskSupported() const = 0;</p>
+ *
+ * <p>virtual void train();</p>
+ *
+ * <p>/ *</p>
+ * <ul>
+ *   <li> Group of methods to match descriptors from an image pair.
+ *   <li> /
+ * </ul>
+ *
+ * <p>void match(const Mat& queryDescriptors, const Mat& trainDescriptors,</p>
+ *
+ * <p>vector<DMatch>& matches, const Mat& mask=Mat()) const;</p>
+ *
+ * <p>void knnMatch(const Mat& queryDescriptors, const Mat& trainDescriptors,</p>
+ *
+ * <p>vector<vector<DMatch> >& matches, int k,</p>
+ *
+ * <p>const Mat& mask=Mat(), bool compactResult=false) const;</p>
+ *
+ * <p>void radiusMatch(const Mat& queryDescriptors, const Mat& trainDescriptors,</p>
+ *
+ * <p>vector<vector<DMatch> >& matches, float maxDistance,</p>
+ *
+ * <p>const Mat& mask=Mat(), bool compactResult=false) const;</p>
+ *
+ * <p>/ *</p>
+ * <ul>
+ *   <li> Group of methods to match descriptors from one image to an image set.
+ *   <li> /
+ * </ul>
+ *
+ * <p>void match(const Mat& queryDescriptors, vector<DMatch>& matches,</p>
+ *
+ * <p>const vector<Mat>& masks=vector<Mat>());</p>
+ *
+ * <p>void knnMatch(const Mat& queryDescriptors, vector<vector<DMatch> >& matches,</p>
+ *
+ * <p>int k, const vector<Mat>& masks=vector<Mat>(),</p>
+ *
+ * <p>bool compactResult=false);</p>
+ *
+ * <p>void radiusMatch(const Mat& queryDescriptors, vector<vector<DMatch> >&
+ * matches,</p>
+ *
+ * <p>float maxDistance, const vector<Mat>& masks=vector<Mat>(),</p>
+ *
+ * <p>bool compactResult=false);</p>
+ *
+ * <p>virtual void read(const FileNode&);</p>
+ *
+ * <p>virtual void write(FileStorage&) const;</p>
+ *
+ * <p>virtual Ptr<DescriptorMatcher> clone(bool emptyTrainData=false) const = 0;</p>
+ *
+ * <p>static Ptr<DescriptorMatcher> create(const string& descriptorMatcherType);</p>
+ *
+ * <p>protected:</p>
+ *
+ * <p>vector<Mat> trainDescCollection;...</p>
+ *
+ * <p>};</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher">org.opencv.features2d.DescriptorMatcher : public Algorithm</a>
+ */
+public class DescriptorMatcher {
+
+    protected final long nativeObj;
+    protected DescriptorMatcher(long addr) { nativeObj = addr; }
+
+
+    public static final int
+            FLANNBASED = 1,
+            BRUTEFORCE = 2,
+            BRUTEFORCE_L1 = 3,
+            BRUTEFORCE_HAMMING = 4,
+            BRUTEFORCE_HAMMINGLUT = 5,
+            BRUTEFORCE_SL2 = 6;
+
+
+    //
+    // C++:  void javaDescriptorMatcher::add(vector_Mat descriptors)
+    //
+
+/**
+ * <p>Adds descriptors to train a descriptor collection. If the collection
+ * <code>trainDescCollectionis</code> is not empty, the new descriptors are
+ * added to existing train descriptors.</p>
+ *
+ * @param descriptors Descriptors to add. Each <code>descriptors[i]</code> is a
+ * set of descriptors from the same train image.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-add">org.opencv.features2d.DescriptorMatcher.add</a>
+ */
+    public  void add(List<Mat> descriptors)
+    {
+        Mat descriptors_mat = Converters.vector_Mat_to_Mat(descriptors);
+        add_0(nativeObj, descriptors_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::clear()
+    //
+
+/**
+ * <p>Clears the train descriptor collection.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-clear">org.opencv.features2d.DescriptorMatcher.clear</a>
+ */
+    public  void clear()
+    {
+
+        clear_0(nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  javaDescriptorMatcher* javaDescriptorMatcher::jclone(bool emptyTrainData = false)
+    //
+
+    public  DescriptorMatcher clone(boolean emptyTrainData)
+    {
+
+        DescriptorMatcher retVal = new DescriptorMatcher(clone_0(nativeObj, emptyTrainData));
+
+        return retVal;
+    }
+
+    public  DescriptorMatcher clone()
+    {
+
+        DescriptorMatcher retVal = new DescriptorMatcher(clone_1(nativeObj));
+
+        return retVal;
+    }
+
+
+    //
+    // C++: static javaDescriptorMatcher* javaDescriptorMatcher::create(int matcherType)
+    //
+
+/**
+ * <p>Creates a descriptor matcher of a given type with the default parameters
+ * (using default constructor).</p>
+ *
+ * @param matcherType a matcherType
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-create">org.opencv.features2d.DescriptorMatcher.create</a>
+ */
+    public static DescriptorMatcher create(int matcherType)
+    {
+
+        DescriptorMatcher retVal = new DescriptorMatcher(create_0(matcherType));
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  bool javaDescriptorMatcher::empty()
+    //
+
+/**
+ * <p>Returns true if there are no train descriptors in the collection.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-empty">org.opencv.features2d.DescriptorMatcher.empty</a>
+ */
+    public  boolean empty()
+    {
+
+        boolean retVal = empty_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  vector_Mat javaDescriptorMatcher::getTrainDescriptors()
+    //
+
+/**
+ * <p>Returns a constant link to the train descriptor collection <code>trainDescCollection</code>.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-gettraindescriptors">org.opencv.features2d.DescriptorMatcher.getTrainDescriptors</a>
+ */
+    public  List<Mat> getTrainDescriptors()
+    {
+        List<Mat> retVal = new ArrayList<Mat>();
+        Mat retValMat = new Mat(getTrainDescriptors_0(nativeObj));
+        Converters.Mat_to_vector_Mat(retValMat, retVal);
+        return retVal;
+    }
+
+
+    //
+    // C++:  bool javaDescriptorMatcher::isMaskSupported()
+    //
+
+/**
+ * <p>Returns true if the descriptor matcher supports masking permissible matches.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-ismasksupported">org.opencv.features2d.DescriptorMatcher.isMaskSupported</a>
+ */
+    public  boolean isMaskSupported()
+    {
+
+        boolean retVal = isMaskSupported_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::knnMatch(Mat queryDescriptors, Mat trainDescriptors, vector_vector_DMatch& matches, int k, Mat mask = Mat(), bool compactResult = false)
+    //
+
+/**
+ * <p>Finds the k best matches for each descriptor from a query set.</p>
+ *
+ * <p>These extended variants of "DescriptorMatcher.match" methods find several
+ * best matches for each query descriptor. The matches are returned in the
+ * distance increasing order. See "DescriptorMatcher.match" for the details
+ * about query and train descriptors.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param trainDescriptors Train set of descriptors. This set is not added to
+ * the train descriptors collection stored in the class object.
+ * @param matches Matches. Each <code>matches[i]</code> is k or less matches for
+ * the same query descriptor.
+ * @param k Count of best matches found per each query descriptor or less if a
+ * query descriptor has less than k possible matches in total.
+ * @param mask Mask specifying permissible matches between an input query and
+ * train matrices of descriptors.
+ * @param compactResult Parameter used when the mask (or masks) is not empty. If
+ * <code>compactResult</code> is false, the <code>matches</code> vector has the
+ * same size as <code>queryDescriptors</code> rows. If <code>compactResult</code>
+ * is true, the <code>matches</code> vector does not contain matches for fully
+ * masked-out query descriptors.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-knnmatch">org.opencv.features2d.DescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryDescriptors, Mat trainDescriptors, List<MatOfDMatch> matches, int k, Mat mask, boolean compactResult)
+    {
+        Mat matches_mat = new Mat();
+        knnMatch_0(nativeObj, queryDescriptors.nativeObj, trainDescriptors.nativeObj, matches_mat.nativeObj, k, mask.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>Finds the k best matches for each descriptor from a query set.</p>
+ *
+ * <p>These extended variants of "DescriptorMatcher.match" methods find several
+ * best matches for each query descriptor. The matches are returned in the
+ * distance increasing order. See "DescriptorMatcher.match" for the details
+ * about query and train descriptors.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param trainDescriptors Train set of descriptors. This set is not added to
+ * the train descriptors collection stored in the class object.
+ * @param matches Matches. Each <code>matches[i]</code> is k or less matches for
+ * the same query descriptor.
+ * @param k Count of best matches found per each query descriptor or less if a
+ * query descriptor has less than k possible matches in total.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-knnmatch">org.opencv.features2d.DescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryDescriptors, Mat trainDescriptors, List<MatOfDMatch> matches, int k)
+    {
+        Mat matches_mat = new Mat();
+        knnMatch_1(nativeObj, queryDescriptors.nativeObj, trainDescriptors.nativeObj, matches_mat.nativeObj, k);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::knnMatch(Mat queryDescriptors, vector_vector_DMatch& matches, int k, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    //
+
+/**
+ * <p>Finds the k best matches for each descriptor from a query set.</p>
+ *
+ * <p>These extended variants of "DescriptorMatcher.match" methods find several
+ * best matches for each query descriptor. The matches are returned in the
+ * distance increasing order. See "DescriptorMatcher.match" for the details
+ * about query and train descriptors.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param matches Matches. Each <code>matches[i]</code> is k or less matches for
+ * the same query descriptor.
+ * @param k Count of best matches found per each query descriptor or less if a
+ * query descriptor has less than k possible matches in total.
+ * @param masks Set of masks. Each <code>masks[i]</code> specifies permissible
+ * matches between the input query descriptors and stored train descriptors from
+ * the i-th image <code>trainDescCollection[i]</code>.
+ * @param compactResult Parameter used when the mask (or masks) is not empty. If
+ * <code>compactResult</code> is false, the <code>matches</code> vector has the
+ * same size as <code>queryDescriptors</code> rows. If <code>compactResult</code>
+ * is true, the <code>matches</code> vector does not contain matches for fully
+ * masked-out query descriptors.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-knnmatch">org.opencv.features2d.DescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryDescriptors, List<MatOfDMatch> matches, int k, List<Mat> masks, boolean compactResult)
+    {
+        Mat matches_mat = new Mat();
+        Mat masks_mat = Converters.vector_Mat_to_Mat(masks);
+        knnMatch_2(nativeObj, queryDescriptors.nativeObj, matches_mat.nativeObj, k, masks_mat.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>Finds the k best matches for each descriptor from a query set.</p>
+ *
+ * <p>These extended variants of "DescriptorMatcher.match" methods find several
+ * best matches for each query descriptor. The matches are returned in the
+ * distance increasing order. See "DescriptorMatcher.match" for the details
+ * about query and train descriptors.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param matches Matches. Each <code>matches[i]</code> is k or less matches for
+ * the same query descriptor.
+ * @param k Count of best matches found per each query descriptor or less if a
+ * query descriptor has less than k possible matches in total.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-knnmatch">org.opencv.features2d.DescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryDescriptors, List<MatOfDMatch> matches, int k)
+    {
+        Mat matches_mat = new Mat();
+        knnMatch_3(nativeObj, queryDescriptors.nativeObj, matches_mat.nativeObj, k);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::match(Mat queryDescriptors, Mat trainDescriptors, vector_DMatch& matches, Mat mask = Mat())
+    //
+
+/**
+ * <p>Finds the best match for each descriptor from a query set.</p>
+ *
+ * <p>In the first variant of this method, the train descriptors are passed as an
+ * input argument. In the second variant of the method, train descriptors
+ * collection that was set by <code>DescriptorMatcher.add</code> is used.
+ * Optional mask (or masks) can be passed to specify which query and training
+ * descriptors can be matched. Namely, <code>queryDescriptors[i]</code> can be
+ * matched with <code>trainDescriptors[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param trainDescriptors Train set of descriptors. This set is not added to
+ * the train descriptors collection stored in the class object.
+ * @param matches Matches. If a query descriptor is masked out in
+ * <code>mask</code>, no match is added for this descriptor. So,
+ * <code>matches</code> size may be smaller than the query descriptors count.
+ * @param mask Mask specifying permissible matches between an input query and
+ * train matrices of descriptors.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-match">org.opencv.features2d.DescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryDescriptors, Mat trainDescriptors, MatOfDMatch matches, Mat mask)
+    {
+        Mat matches_mat = matches;
+        match_0(nativeObj, queryDescriptors.nativeObj, trainDescriptors.nativeObj, matches_mat.nativeObj, mask.nativeObj);
+
+        return;
+    }
+
+/**
+ * <p>Finds the best match for each descriptor from a query set.</p>
+ *
+ * <p>In the first variant of this method, the train descriptors are passed as an
+ * input argument. In the second variant of the method, train descriptors
+ * collection that was set by <code>DescriptorMatcher.add</code> is used.
+ * Optional mask (or masks) can be passed to specify which query and training
+ * descriptors can be matched. Namely, <code>queryDescriptors[i]</code> can be
+ * matched with <code>trainDescriptors[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param trainDescriptors Train set of descriptors. This set is not added to
+ * the train descriptors collection stored in the class object.
+ * @param matches Matches. If a query descriptor is masked out in
+ * <code>mask</code>, no match is added for this descriptor. So,
+ * <code>matches</code> size may be smaller than the query descriptors count.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-match">org.opencv.features2d.DescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryDescriptors, Mat trainDescriptors, MatOfDMatch matches)
+    {
+        Mat matches_mat = matches;
+        match_1(nativeObj, queryDescriptors.nativeObj, trainDescriptors.nativeObj, matches_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::match(Mat queryDescriptors, vector_DMatch& matches, vector_Mat masks = vector<Mat>())
+    //
+
+/**
+ * <p>Finds the best match for each descriptor from a query set.</p>
+ *
+ * <p>In the first variant of this method, the train descriptors are passed as an
+ * input argument. In the second variant of the method, train descriptors
+ * collection that was set by <code>DescriptorMatcher.add</code> is used.
+ * Optional mask (or masks) can be passed to specify which query and training
+ * descriptors can be matched. Namely, <code>queryDescriptors[i]</code> can be
+ * matched with <code>trainDescriptors[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param matches Matches. If a query descriptor is masked out in
+ * <code>mask</code>, no match is added for this descriptor. So,
+ * <code>matches</code> size may be smaller than the query descriptors count.
+ * @param masks Set of masks. Each <code>masks[i]</code> specifies permissible
+ * matches between the input query descriptors and stored train descriptors from
+ * the i-th image <code>trainDescCollection[i]</code>.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-match">org.opencv.features2d.DescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryDescriptors, MatOfDMatch matches, List<Mat> masks)
+    {
+        Mat matches_mat = matches;
+        Mat masks_mat = Converters.vector_Mat_to_Mat(masks);
+        match_2(nativeObj, queryDescriptors.nativeObj, matches_mat.nativeObj, masks_mat.nativeObj);
+
+        return;
+    }
+
+/**
+ * <p>Finds the best match for each descriptor from a query set.</p>
+ *
+ * <p>In the first variant of this method, the train descriptors are passed as an
+ * input argument. In the second variant of the method, train descriptors
+ * collection that was set by <code>DescriptorMatcher.add</code> is used.
+ * Optional mask (or masks) can be passed to specify which query and training
+ * descriptors can be matched. Namely, <code>queryDescriptors[i]</code> can be
+ * matched with <code>trainDescriptors[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param matches Matches. If a query descriptor is masked out in
+ * <code>mask</code>, no match is added for this descriptor. So,
+ * <code>matches</code> size may be smaller than the query descriptors count.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-match">org.opencv.features2d.DescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryDescriptors, MatOfDMatch matches)
+    {
+        Mat matches_mat = matches;
+        match_3(nativeObj, queryDescriptors.nativeObj, matches_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::radiusMatch(Mat queryDescriptors, Mat trainDescriptors, vector_vector_DMatch& matches, float maxDistance, Mat mask = Mat(), bool compactResult = false)
+    //
+
+/**
+ * <p>For each query descriptor, finds the training descriptors not farther than
+ * the specified distance.</p>
+ *
+ * <p>For each query descriptor, the methods find such training descriptors that
+ * the distance between the query descriptor and the training descriptor is
+ * equal or smaller than <code>maxDistance</code>. Found matches are returned in
+ * the distance increasing order.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param trainDescriptors Train set of descriptors. This set is not added to
+ * the train descriptors collection stored in the class object.
+ * @param matches Found matches.
+ * @param maxDistance Threshold for the distance between matched descriptors.
+ * Distance means here metric distance (e.g. Hamming distance), not the distance
+ * between coordinates (which is measured in Pixels)!
+ * @param mask Mask specifying permissible matches between an input query and
+ * train matrices of descriptors.
+ * @param compactResult Parameter used when the mask (or masks) is not empty. If
+ * <code>compactResult</code> is false, the <code>matches</code> vector has the
+ * same size as <code>queryDescriptors</code> rows. If <code>compactResult</code>
+ * is true, the <code>matches</code> vector does not contain matches for fully
+ * masked-out query descriptors.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-radiusmatch">org.opencv.features2d.DescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryDescriptors, Mat trainDescriptors, List<MatOfDMatch> matches, float maxDistance, Mat mask, boolean compactResult)
+    {
+        Mat matches_mat = new Mat();
+        radiusMatch_0(nativeObj, queryDescriptors.nativeObj, trainDescriptors.nativeObj, matches_mat.nativeObj, maxDistance, mask.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>For each query descriptor, finds the training descriptors not farther than
+ * the specified distance.</p>
+ *
+ * <p>For each query descriptor, the methods find such training descriptors that
+ * the distance between the query descriptor and the training descriptor is
+ * equal or smaller than <code>maxDistance</code>. Found matches are returned in
+ * the distance increasing order.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param trainDescriptors Train set of descriptors. This set is not added to
+ * the train descriptors collection stored in the class object.
+ * @param matches Found matches.
+ * @param maxDistance Threshold for the distance between matched descriptors.
+ * Distance means here metric distance (e.g. Hamming distance), not the distance
+ * between coordinates (which is measured in Pixels)!
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-radiusmatch">org.opencv.features2d.DescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryDescriptors, Mat trainDescriptors, List<MatOfDMatch> matches, float maxDistance)
+    {
+        Mat matches_mat = new Mat();
+        radiusMatch_1(nativeObj, queryDescriptors.nativeObj, trainDescriptors.nativeObj, matches_mat.nativeObj, maxDistance);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::radiusMatch(Mat queryDescriptors, vector_vector_DMatch& matches, float maxDistance, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    //
+
+/**
+ * <p>For each query descriptor, finds the training descriptors not farther than
+ * the specified distance.</p>
+ *
+ * <p>For each query descriptor, the methods find such training descriptors that
+ * the distance between the query descriptor and the training descriptor is
+ * equal or smaller than <code>maxDistance</code>. Found matches are returned in
+ * the distance increasing order.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param matches Found matches.
+ * @param maxDistance Threshold for the distance between matched descriptors.
+ * Distance means here metric distance (e.g. Hamming distance), not the distance
+ * between coordinates (which is measured in Pixels)!
+ * @param masks Set of masks. Each <code>masks[i]</code> specifies permissible
+ * matches between the input query descriptors and stored train descriptors from
+ * the i-th image <code>trainDescCollection[i]</code>.
+ * @param compactResult Parameter used when the mask (or masks) is not empty. If
+ * <code>compactResult</code> is false, the <code>matches</code> vector has the
+ * same size as <code>queryDescriptors</code> rows. If <code>compactResult</code>
+ * is true, the <code>matches</code> vector does not contain matches for fully
+ * masked-out query descriptors.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-radiusmatch">org.opencv.features2d.DescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryDescriptors, List<MatOfDMatch> matches, float maxDistance, List<Mat> masks, boolean compactResult)
+    {
+        Mat matches_mat = new Mat();
+        Mat masks_mat = Converters.vector_Mat_to_Mat(masks);
+        radiusMatch_2(nativeObj, queryDescriptors.nativeObj, matches_mat.nativeObj, maxDistance, masks_mat.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>For each query descriptor, finds the training descriptors not farther than
+ * the specified distance.</p>
+ *
+ * <p>For each query descriptor, the methods find such training descriptors that
+ * the distance between the query descriptor and the training descriptor is
+ * equal or smaller than <code>maxDistance</code>. Found matches are returned in
+ * the distance increasing order.</p>
+ *
+ * @param queryDescriptors Query set of descriptors.
+ * @param matches Found matches.
+ * @param maxDistance Threshold for the distance between matched descriptors.
+ * Distance means here metric distance (e.g. Hamming distance), not the distance
+ * between coordinates (which is measured in Pixels)!
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-radiusmatch">org.opencv.features2d.DescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryDescriptors, List<MatOfDMatch> matches, float maxDistance)
+    {
+        Mat matches_mat = new Mat();
+        radiusMatch_3(nativeObj, queryDescriptors.nativeObj, matches_mat.nativeObj, maxDistance);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::read(string fileName)
+    //
+
+    public  void read(String fileName)
+    {
+
+        read_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::train()
+    //
+
+/**
+ * <p>Trains a descriptor matcher</p>
+ *
+ * <p>Trains a descriptor matcher (for example, the flann index). In all methods to
+ * match, the method <code>train()</code> is run every time before matching.
+ * Some descriptor matchers (for example, <code>BruteForceMatcher</code>) have
+ * an empty implementation of this method. Other matchers really train their
+ * inner structures (for example, <code>FlannBasedMatcher</code> trains
+ * <code>flann.Index</code>).</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#descriptormatcher-train">org.opencv.features2d.DescriptorMatcher.train</a>
+ */
+    public  void train()
+    {
+
+        train_0(nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaDescriptorMatcher::write(string fileName)
+    //
+
+    public  void write(String fileName)
+    {
+
+        write_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    @Override
+    protected void finalize() throws Throwable {
+        delete(nativeObj);
+    }
+
+
+
+    // C++:  void javaDescriptorMatcher::add(vector_Mat descriptors)
+    private static native void add_0(long nativeObj, long descriptors_mat_nativeObj);
+
+    // C++:  void javaDescriptorMatcher::clear()
+    private static native void clear_0(long nativeObj);
+
+    // C++:  javaDescriptorMatcher* javaDescriptorMatcher::jclone(bool emptyTrainData = false)
+    private static native long clone_0(long nativeObj, boolean emptyTrainData);
+    private static native long clone_1(long nativeObj);
+
+    // C++: static javaDescriptorMatcher* javaDescriptorMatcher::create(int matcherType)
+    private static native long create_0(int matcherType);
+
+    // C++:  bool javaDescriptorMatcher::empty()
+    private static native boolean empty_0(long nativeObj);
+
+    // C++:  vector_Mat javaDescriptorMatcher::getTrainDescriptors()
+    private static native long getTrainDescriptors_0(long nativeObj);
+
+    // C++:  bool javaDescriptorMatcher::isMaskSupported()
+    private static native boolean isMaskSupported_0(long nativeObj);
+
+    // C++:  void javaDescriptorMatcher::knnMatch(Mat queryDescriptors, Mat trainDescriptors, vector_vector_DMatch& matches, int k, Mat mask = Mat(), bool compactResult = false)
+    private static native void knnMatch_0(long nativeObj, long queryDescriptors_nativeObj, long trainDescriptors_nativeObj, long matches_mat_nativeObj, int k, long mask_nativeObj, boolean compactResult);
+    private static native void knnMatch_1(long nativeObj, long queryDescriptors_nativeObj, long trainDescriptors_nativeObj, long matches_mat_nativeObj, int k);
+
+    // C++:  void javaDescriptorMatcher::knnMatch(Mat queryDescriptors, vector_vector_DMatch& matches, int k, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    private static native void knnMatch_2(long nativeObj, long queryDescriptors_nativeObj, long matches_mat_nativeObj, int k, long masks_mat_nativeObj, boolean compactResult);
+    private static native void knnMatch_3(long nativeObj, long queryDescriptors_nativeObj, long matches_mat_nativeObj, int k);
+
+    // C++:  void javaDescriptorMatcher::match(Mat queryDescriptors, Mat trainDescriptors, vector_DMatch& matches, Mat mask = Mat())
+    private static native void match_0(long nativeObj, long queryDescriptors_nativeObj, long trainDescriptors_nativeObj, long matches_mat_nativeObj, long mask_nativeObj);
+    private static native void match_1(long nativeObj, long queryDescriptors_nativeObj, long trainDescriptors_nativeObj, long matches_mat_nativeObj);
+
+    // C++:  void javaDescriptorMatcher::match(Mat queryDescriptors, vector_DMatch& matches, vector_Mat masks = vector<Mat>())
+    private static native void match_2(long nativeObj, long queryDescriptors_nativeObj, long matches_mat_nativeObj, long masks_mat_nativeObj);
+    private static native void match_3(long nativeObj, long queryDescriptors_nativeObj, long matches_mat_nativeObj);
+
+    // C++:  void javaDescriptorMatcher::radiusMatch(Mat queryDescriptors, Mat trainDescriptors, vector_vector_DMatch& matches, float maxDistance, Mat mask = Mat(), bool compactResult = false)
+    private static native void radiusMatch_0(long nativeObj, long queryDescriptors_nativeObj, long trainDescriptors_nativeObj, long matches_mat_nativeObj, float maxDistance, long mask_nativeObj, boolean compactResult);
+    private static native void radiusMatch_1(long nativeObj, long queryDescriptors_nativeObj, long trainDescriptors_nativeObj, long matches_mat_nativeObj, float maxDistance);
+
+    // C++:  void javaDescriptorMatcher::radiusMatch(Mat queryDescriptors, vector_vector_DMatch& matches, float maxDistance, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    private static native void radiusMatch_2(long nativeObj, long queryDescriptors_nativeObj, long matches_mat_nativeObj, float maxDistance, long masks_mat_nativeObj, boolean compactResult);
+    private static native void radiusMatch_3(long nativeObj, long queryDescriptors_nativeObj, long matches_mat_nativeObj, float maxDistance);
+
+    // C++:  void javaDescriptorMatcher::read(string fileName)
+    private static native void read_0(long nativeObj, String fileName);
+
+    // C++:  void javaDescriptorMatcher::train()
+    private static native void train_0(long nativeObj);
+
+    // C++:  void javaDescriptorMatcher::write(string fileName)
+    private static native void write_0(long nativeObj, String fileName);
+
+    // native support for java finalize()
+    private static native void delete(long nativeObj);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/FeatureDetector.class b/OpenCV/src/main/resources/org/opencv/features2d/FeatureDetector.class
new file mode 100644
index 0000000..8e74870
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/features2d/FeatureDetector.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/FeatureDetector.java b/OpenCV/src/main/resources/org/opencv/features2d/FeatureDetector.java
new file mode 100644
index 0000000..7f67e32
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/features2d/FeatureDetector.java
@@ -0,0 +1,303 @@
+
+//
+// This file is auto-generated. Please don't modify it!
+//
+package org.opencv.features2d;
+
+import java.lang.String;
+import java.util.List;
+import org.opencv.core.Mat;
+import org.opencv.core.MatOfKeyPoint;
+import org.opencv.utils.Converters;
+
+// C++: class javaFeatureDetector
+/**
+ * <p>Abstract base class for 2D image feature detectors.</p>
+ *
+ * <p>class CV_EXPORTS FeatureDetector <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>public:</p>
+ *
+ * <p>virtual ~FeatureDetector();</p>
+ *
+ * <p>void detect(const Mat& image, vector<KeyPoint>& keypoints,</p>
+ *
+ * <p>const Mat& mask=Mat()) const;</p>
+ *
+ * <p>void detect(const vector<Mat>& images,</p>
+ *
+ * <p>vector<vector<KeyPoint> >& keypoints,</p>
+ *
+ * <p>const vector<Mat>& masks=vector<Mat>()) const;</p>
+ *
+ * <p>virtual void read(const FileNode&);</p>
+ *
+ * <p>virtual void write(FileStorage&) const;</p>
+ *
+ * <p>static Ptr<FeatureDetector> create(const string& detectorType);</p>
+ *
+ * <p>protected:...</p>
+ *
+ * <p>};</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#featuredetector">org.opencv.features2d.FeatureDetector : public Algorithm</a>
+ */
+public class FeatureDetector {
+
+    protected final long nativeObj;
+    protected FeatureDetector(long addr) { nativeObj = addr; }
+
+
+    private static final int
+            GRIDDETECTOR = 1000,
+            PYRAMIDDETECTOR = 2000,
+            DYNAMICDETECTOR = 3000;
+
+
+    public static final int
+            FAST = 1,
+            STAR = 2,
+            SIFT = 3,
+            SURF = 4,
+            ORB = 5,
+            MSER = 6,
+            GFTT = 7,
+            HARRIS = 8,
+            SIMPLEBLOB = 9,
+            DENSE = 10,
+            BRISK = 11,
+            GRIDRETECTOR = 1000,
+            GRID_FAST = GRIDDETECTOR + FAST,
+            GRID_STAR = GRIDDETECTOR + STAR,
+            GRID_SIFT = GRIDDETECTOR + SIFT,
+            GRID_SURF = GRIDDETECTOR + SURF,
+            GRID_ORB = GRIDDETECTOR + ORB,
+            GRID_MSER = GRIDDETECTOR + MSER,
+            GRID_GFTT = GRIDDETECTOR + GFTT,
+            GRID_HARRIS = GRIDDETECTOR + HARRIS,
+            GRID_SIMPLEBLOB = GRIDDETECTOR + SIMPLEBLOB,
+            GRID_DENSE = GRIDDETECTOR + DENSE,
+            GRID_BRISK = GRIDDETECTOR + BRISK,
+            PYRAMID_FAST = PYRAMIDDETECTOR + FAST,
+            PYRAMID_STAR = PYRAMIDDETECTOR + STAR,
+            PYRAMID_SIFT = PYRAMIDDETECTOR + SIFT,
+            PYRAMID_SURF = PYRAMIDDETECTOR + SURF,
+            PYRAMID_ORB = PYRAMIDDETECTOR + ORB,
+            PYRAMID_MSER = PYRAMIDDETECTOR + MSER,
+            PYRAMID_GFTT = PYRAMIDDETECTOR + GFTT,
+            PYRAMID_HARRIS = PYRAMIDDETECTOR + HARRIS,
+            PYRAMID_SIMPLEBLOB = PYRAMIDDETECTOR + SIMPLEBLOB,
+            PYRAMID_DENSE = PYRAMIDDETECTOR + DENSE,
+            PYRAMID_BRISK = PYRAMIDDETECTOR + BRISK,
+            DYNAMIC_FAST = DYNAMICDETECTOR + FAST,
+            DYNAMIC_STAR = DYNAMICDETECTOR + STAR,
+            DYNAMIC_SIFT = DYNAMICDETECTOR + SIFT,
+            DYNAMIC_SURF = DYNAMICDETECTOR + SURF,
+            DYNAMIC_ORB = DYNAMICDETECTOR + ORB,
+            DYNAMIC_MSER = DYNAMICDETECTOR + MSER,
+            DYNAMIC_GFTT = DYNAMICDETECTOR + GFTT,
+            DYNAMIC_HARRIS = DYNAMICDETECTOR + HARRIS,
+            DYNAMIC_SIMPLEBLOB = DYNAMICDETECTOR + SIMPLEBLOB,
+            DYNAMIC_DENSE = DYNAMICDETECTOR + DENSE,
+            DYNAMIC_BRISK = DYNAMICDETECTOR + BRISK;
+
+
+    //
+    // C++: static javaFeatureDetector* javaFeatureDetector::create(int detectorType)
+    //
+
+/**
+ * <p>Creates a feature detector by its name.</p>
+ *
+ * <p>The following detector types are supported:</p>
+ * <ul>
+ *   <li> <code>"FAST"</code> -- "FastFeatureDetector"
+ *   <li> <code>"STAR"</code> -- "StarFeatureDetector"
+ *   <li> <code>"SIFT"</code> -- "SIFT" (nonfree module)
+ *   <li> <code>"SURF"</code> -- "SURF" (nonfree module)
+ *   <li> <code>"ORB"</code> -- "ORB"
+ *   <li> <code>"BRISK"</code> -- "BRISK"
+ *   <li> <code>"MSER"</code> -- "MSER"
+ *   <li> <code>"GFTT"</code> -- "GoodFeaturesToTrackDetector"
+ *   <li> <code>"HARRIS"</code> -- "GoodFeaturesToTrackDetector" with Harris
+ * detector enabled
+ *   <li> <code>"Dense"</code> -- "DenseFeatureDetector"
+ *   <li> <code>"SimpleBlob"</code> -- "SimpleBlobDetector"
+ * </ul>
+ *
+ * <p>Also a combined format is supported: feature detector adapter name
+ * (<code>"Grid"</code> -- "GridAdaptedFeatureDetector", <code>"Pyramid"</code>
+ * -- "PyramidAdaptedFeatureDetector") + feature detector name (see above), for
+ * example: <code>"GridFAST"</code>, <code>"PyramidSTAR"</code>.</p>
+ *
+ * @param detectorType Feature detector type.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#featuredetector-create">org.opencv.features2d.FeatureDetector.create</a>
+ */
+    public static FeatureDetector create(int detectorType)
+    {
+
+        FeatureDetector retVal = new FeatureDetector(create_0(detectorType));
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  void javaFeatureDetector::detect(Mat image, vector_KeyPoint& keypoints, Mat mask = Mat())
+    //
+
+/**
+ * <p>Detects keypoints in an image (first variant) or image set (second variant).</p>
+ *
+ * @param image Image.
+ * @param keypoints The detected keypoints. In the second variant of the method
+ * <code>keypoints[i]</code> is a set of keypoints detected in <code>images[i]</code>.
+ * @param mask Mask specifying where to look for keypoints (optional). It must
+ * be a 8-bit integer matrix with non-zero values in the region of interest.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#featuredetector-detect">org.opencv.features2d.FeatureDetector.detect</a>
+ */
+    public  void detect(Mat image, MatOfKeyPoint keypoints, Mat mask)
+    {
+        Mat keypoints_mat = keypoints;
+        detect_0(nativeObj, image.nativeObj, keypoints_mat.nativeObj, mask.nativeObj);
+
+        return;
+    }
+
+/**
+ * <p>Detects keypoints in an image (first variant) or image set (second variant).</p>
+ *
+ * @param image Image.
+ * @param keypoints The detected keypoints. In the second variant of the method
+ * <code>keypoints[i]</code> is a set of keypoints detected in <code>images[i]</code>.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#featuredetector-detect">org.opencv.features2d.FeatureDetector.detect</a>
+ */
+    public  void detect(Mat image, MatOfKeyPoint keypoints)
+    {
+        Mat keypoints_mat = keypoints;
+        detect_1(nativeObj, image.nativeObj, keypoints_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaFeatureDetector::detect(vector_Mat images, vector_vector_KeyPoint& keypoints, vector_Mat masks = vector<Mat>())
+    //
+
+/**
+ * <p>Detects keypoints in an image (first variant) or image set (second variant).</p>
+ *
+ * @param images Image set.
+ * @param keypoints The detected keypoints. In the second variant of the method
+ * <code>keypoints[i]</code> is a set of keypoints detected in <code>images[i]</code>.
+ * @param masks Masks for each input image specifying where to look for
+ * keypoints (optional). <code>masks[i]</code> is a mask for <code>images[i]</code>.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#featuredetector-detect">org.opencv.features2d.FeatureDetector.detect</a>
+ */
+    public  void detect(List<Mat> images, List<MatOfKeyPoint> keypoints, List<Mat> masks)
+    {
+        Mat images_mat = Converters.vector_Mat_to_Mat(images);
+        Mat keypoints_mat = new Mat();
+        Mat masks_mat = Converters.vector_Mat_to_Mat(masks);
+        detect_2(nativeObj, images_mat.nativeObj, keypoints_mat.nativeObj, masks_mat.nativeObj);
+        Converters.Mat_to_vector_vector_KeyPoint(keypoints_mat, keypoints);
+        return;
+    }
+
+/**
+ * <p>Detects keypoints in an image (first variant) or image set (second variant).</p>
+ *
+ * @param images Image set.
+ * @param keypoints The detected keypoints. In the second variant of the method
+ * <code>keypoints[i]</code> is a set of keypoints detected in <code>images[i]</code>.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#featuredetector-detect">org.opencv.features2d.FeatureDetector.detect</a>
+ */
+    public  void detect(List<Mat> images, List<MatOfKeyPoint> keypoints)
+    {
+        Mat images_mat = Converters.vector_Mat_to_Mat(images);
+        Mat keypoints_mat = new Mat();
+        detect_3(nativeObj, images_mat.nativeObj, keypoints_mat.nativeObj);
+        Converters.Mat_to_vector_vector_KeyPoint(keypoints_mat, keypoints);
+        return;
+    }
+
+
+    //
+    // C++:  bool javaFeatureDetector::empty()
+    //
+
+    public  boolean empty()
+    {
+
+        boolean retVal = empty_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  void javaFeatureDetector::read(string fileName)
+    //
+
+    public  void read(String fileName)
+    {
+
+        read_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaFeatureDetector::write(string fileName)
+    //
+
+    public  void write(String fileName)
+    {
+
+        write_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    @Override
+    protected void finalize() throws Throwable {
+        delete(nativeObj);
+    }
+
+
+
+    // C++: static javaFeatureDetector* javaFeatureDetector::create(int detectorType)
+    private static native long create_0(int detectorType);
+
+    // C++:  void javaFeatureDetector::detect(Mat image, vector_KeyPoint& keypoints, Mat mask = Mat())
+    private static native void detect_0(long nativeObj, long image_nativeObj, long keypoints_mat_nativeObj, long mask_nativeObj);
+    private static native void detect_1(long nativeObj, long image_nativeObj, long keypoints_mat_nativeObj);
+
+    // C++:  void javaFeatureDetector::detect(vector_Mat images, vector_vector_KeyPoint& keypoints, vector_Mat masks = vector<Mat>())
+    private static native void detect_2(long nativeObj, long images_mat_nativeObj, long keypoints_mat_nativeObj, long masks_mat_nativeObj);
+    private static native void detect_3(long nativeObj, long images_mat_nativeObj, long keypoints_mat_nativeObj);
+
+    // C++:  bool javaFeatureDetector::empty()
+    private static native boolean empty_0(long nativeObj);
+
+    // C++:  void javaFeatureDetector::read(string fileName)
+    private static native void read_0(long nativeObj, String fileName);
+
+    // C++:  void javaFeatureDetector::write(string fileName)
+    private static native void write_0(long nativeObj, String fileName);
+
+    // native support for java finalize()
+    private static native void delete(long nativeObj);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/Features2d.class b/OpenCV/src/main/resources/org/opencv/features2d/Features2d.class
new file mode 100644
index 0000000..db38922
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/features2d/Features2d.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/Features2d.java b/OpenCV/src/main/resources/org/opencv/features2d/Features2d.java
new file mode 100644
index 0000000..0b17924
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/features2d/Features2d.java
@@ -0,0 +1,402 @@
+
+//
+// This file is auto-generated. Please don't modify it!
+//
+package org.opencv.features2d;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opencv.core.Mat;
+import org.opencv.core.MatOfByte;
+import org.opencv.core.MatOfDMatch;
+import org.opencv.core.MatOfKeyPoint;
+import org.opencv.core.Scalar;
+import org.opencv.utils.Converters;
+
+public class Features2d {
+
+    public static final int
+            DRAW_OVER_OUTIMG = 1,
+            NOT_DRAW_SINGLE_POINTS = 2,
+            DRAW_RICH_KEYPOINTS = 4;
+
+
+    //
+    // C++:  void drawKeypoints(Mat image, vector_KeyPoint keypoints, Mat outImage, Scalar color = Scalar::all(-1), int flags = 0)
+    //
+
+/**
+ * <p>Draws keypoints.</p>
+ *
+ * @param image Source image.
+ * @param keypoints Keypoints from the source image.
+ * @param outImage Output image. Its content depends on the <code>flags</code>
+ * value defining what is drawn in the output image. See possible
+ * <code>flags</code> bit values below.
+ * @param color Color of keypoints.
+ * @param flags Flags setting drawing features. Possible <code>flags</code> bit
+ * values are defined by <code>DrawMatchesFlags</code>. See details above in
+ * "drawMatches".
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html#drawkeypoints">org.opencv.features2d.Features2d.drawKeypoints</a>
+ */
+    public static void drawKeypoints(Mat image, MatOfKeyPoint keypoints, Mat outImage, Scalar color, int flags)
+    {
+        Mat keypoints_mat = keypoints;
+        drawKeypoints_0(image.nativeObj, keypoints_mat.nativeObj, outImage.nativeObj, color.val[0], color.val[1], color.val[2], color.val[3], flags);
+
+        return;
+    }
+
+/**
+ * <p>Draws keypoints.</p>
+ *
+ * @param image Source image.
+ * @param keypoints Keypoints from the source image.
+ * @param outImage Output image. Its content depends on the <code>flags</code>
+ * value defining what is drawn in the output image. See possible
+ * <code>flags</code> bit values below.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html#drawkeypoints">org.opencv.features2d.Features2d.drawKeypoints</a>
+ */
+    public static void drawKeypoints(Mat image, MatOfKeyPoint keypoints, Mat outImage)
+    {
+        Mat keypoints_mat = keypoints;
+        drawKeypoints_1(image.nativeObj, keypoints_mat.nativeObj, outImage.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void drawMatches(Mat img1, vector_KeyPoint keypoints1, Mat img2, vector_KeyPoint keypoints2, vector_DMatch matches1to2, Mat outImg, Scalar matchColor = Scalar::all(-1), Scalar singlePointColor = Scalar::all(-1), vector_char matchesMask = vector<char>(), int flags = 0)
+    //
+
+/**
+ * <p>Draws the found matches of keypoints from two images.</p>
+ *
+ * <p>This function draws matches of keypoints from two images in the output image.
+ * Match is a line connecting two keypoints (circles). The structure
+ * <code>DrawMatchesFlags</code> is defined as follows: struct DrawMatchesFlags
+ * <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>enum</p>
+ *
+ *
+ * <p>DEFAULT = 0, // Output image matrix will be created (Mat.create),</p>
+ *
+ * <p>// i.e. existing memory of output image may be reused.</p>
+ *
+ * <p>// Two source images, matches, and single keypoints</p>
+ *
+ * <p>// will be drawn.</p>
+ *
+ * <p>// For each keypoint, only the center point will be</p>
+ *
+ * <p>// drawn (without a circle around the keypoint with the</p>
+ *
+ * <p>// keypoint size and orientation).</p>
+ *
+ * <p>DRAW_OVER_OUTIMG = 1, // Output image matrix will not be</p>
+ *
+ * <p>// created (using Mat.create). Matches will be drawn</p>
+ *
+ * <p>// on existing content of output image.</p>
+ *
+ * <p>NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn.</p>
+ *
+ * <p>DRAW_RICH_KEYPOINTS = 4 // For each keypoint, the circle around</p>
+ *
+ * <p>// keypoint with keypoint size and orientation will</p>
+ *
+ * <p>// be drawn.</p>
+ *
+ * <p>};</p>
+ *
+ * <p>};</p>
+ *
+ * <p></code></p>
+ *
+ * @param img1 First source image.
+ * @param keypoints1 Keypoints from the first source image.
+ * @param img2 Second source image.
+ * @param keypoints2 Keypoints from the second source image.
+ * @param matches1to2 Matches from the first image to the second one, which
+ * means that <code>keypoints1[i]</code> has a corresponding point in
+ * <code>keypoints2[matches[i]]</code>.
+ * @param outImg Output image. Its content depends on the <code>flags</code>
+ * value defining what is drawn in the output image. See possible
+ * <code>flags</code> bit values below.
+ * @param matchColor Color of matches (lines and connected keypoints). If
+ * <code>matchColor==Scalar.all(-1)</code>, the color is generated randomly.
+ * @param singlePointColor Color of single keypoints (circles), which means that
+ * keypoints do not have the matches. If <code>singlePointColor==Scalar.all(-1)</code>,
+ * the color is generated randomly.
+ * @param matchesMask Mask determining which matches are drawn. If the mask is
+ * empty, all matches are drawn.
+ * @param flags Flags setting drawing features. Possible <code>flags</code> bit
+ * values are defined by <code>DrawMatchesFlags</code>.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html#drawmatches">org.opencv.features2d.Features2d.drawMatches</a>
+ */
+    public static void drawMatches(Mat img1, MatOfKeyPoint keypoints1, Mat img2, MatOfKeyPoint keypoints2, MatOfDMatch matches1to2, Mat outImg, Scalar matchColor, Scalar singlePointColor, MatOfByte matchesMask, int flags)
+    {
+        Mat keypoints1_mat = keypoints1;
+        Mat keypoints2_mat = keypoints2;
+        Mat matches1to2_mat = matches1to2;
+        Mat matchesMask_mat = matchesMask;
+        drawMatches_0(img1.nativeObj, keypoints1_mat.nativeObj, img2.nativeObj, keypoints2_mat.nativeObj, matches1to2_mat.nativeObj, outImg.nativeObj, matchColor.val[0], matchColor.val[1], matchColor.val[2], matchColor.val[3], singlePointColor.val[0], singlePointColor.val[1], singlePointColor.val[2], singlePointColor.val[3], matchesMask_mat.nativeObj, flags);
+
+        return;
+    }
+
+/**
+ * <p>Draws the found matches of keypoints from two images.</p>
+ *
+ * <p>This function draws matches of keypoints from two images in the output image.
+ * Match is a line connecting two keypoints (circles). The structure
+ * <code>DrawMatchesFlags</code> is defined as follows: struct DrawMatchesFlags
+ * <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>enum</p>
+ *
+ *
+ * <p>DEFAULT = 0, // Output image matrix will be created (Mat.create),</p>
+ *
+ * <p>// i.e. existing memory of output image may be reused.</p>
+ *
+ * <p>// Two source images, matches, and single keypoints</p>
+ *
+ * <p>// will be drawn.</p>
+ *
+ * <p>// For each keypoint, only the center point will be</p>
+ *
+ * <p>// drawn (without a circle around the keypoint with the</p>
+ *
+ * <p>// keypoint size and orientation).</p>
+ *
+ * <p>DRAW_OVER_OUTIMG = 1, // Output image matrix will not be</p>
+ *
+ * <p>// created (using Mat.create). Matches will be drawn</p>
+ *
+ * <p>// on existing content of output image.</p>
+ *
+ * <p>NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn.</p>
+ *
+ * <p>DRAW_RICH_KEYPOINTS = 4 // For each keypoint, the circle around</p>
+ *
+ * <p>// keypoint with keypoint size and orientation will</p>
+ *
+ * <p>// be drawn.</p>
+ *
+ * <p>};</p>
+ *
+ * <p>};</p>
+ *
+ * <p></code></p>
+ *
+ * @param img1 First source image.
+ * @param keypoints1 Keypoints from the first source image.
+ * @param img2 Second source image.
+ * @param keypoints2 Keypoints from the second source image.
+ * @param matches1to2 Matches from the first image to the second one, which
+ * means that <code>keypoints1[i]</code> has a corresponding point in
+ * <code>keypoints2[matches[i]]</code>.
+ * @param outImg Output image. Its content depends on the <code>flags</code>
+ * value defining what is drawn in the output image. See possible
+ * <code>flags</code> bit values below.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html#drawmatches">org.opencv.features2d.Features2d.drawMatches</a>
+ */
+    public static void drawMatches(Mat img1, MatOfKeyPoint keypoints1, Mat img2, MatOfKeyPoint keypoints2, MatOfDMatch matches1to2, Mat outImg)
+    {
+        Mat keypoints1_mat = keypoints1;
+        Mat keypoints2_mat = keypoints2;
+        Mat matches1to2_mat = matches1to2;
+        drawMatches_1(img1.nativeObj, keypoints1_mat.nativeObj, img2.nativeObj, keypoints2_mat.nativeObj, matches1to2_mat.nativeObj, outImg.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void drawMatches(Mat img1, vector_KeyPoint keypoints1, Mat img2, vector_KeyPoint keypoints2, vector_vector_DMatch matches1to2, Mat outImg, Scalar matchColor = Scalar::all(-1), Scalar singlePointColor = Scalar::all(-1), vector_vector_char matchesMask = vector<vector<char> >(), int flags = 0)
+    //
+
+/**
+ * <p>Draws the found matches of keypoints from two images.</p>
+ *
+ * <p>This function draws matches of keypoints from two images in the output image.
+ * Match is a line connecting two keypoints (circles). The structure
+ * <code>DrawMatchesFlags</code> is defined as follows: struct DrawMatchesFlags
+ * <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>enum</p>
+ *
+ *
+ * <p>DEFAULT = 0, // Output image matrix will be created (Mat.create),</p>
+ *
+ * <p>// i.e. existing memory of output image may be reused.</p>
+ *
+ * <p>// Two source images, matches, and single keypoints</p>
+ *
+ * <p>// will be drawn.</p>
+ *
+ * <p>// For each keypoint, only the center point will be</p>
+ *
+ * <p>// drawn (without a circle around the keypoint with the</p>
+ *
+ * <p>// keypoint size and orientation).</p>
+ *
+ * <p>DRAW_OVER_OUTIMG = 1, // Output image matrix will not be</p>
+ *
+ * <p>// created (using Mat.create). Matches will be drawn</p>
+ *
+ * <p>// on existing content of output image.</p>
+ *
+ * <p>NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn.</p>
+ *
+ * <p>DRAW_RICH_KEYPOINTS = 4 // For each keypoint, the circle around</p>
+ *
+ * <p>// keypoint with keypoint size and orientation will</p>
+ *
+ * <p>// be drawn.</p>
+ *
+ * <p>};</p>
+ *
+ * <p>};</p>
+ *
+ * <p></code></p>
+ *
+ * @param img1 First source image.
+ * @param keypoints1 Keypoints from the first source image.
+ * @param img2 Second source image.
+ * @param keypoints2 Keypoints from the second source image.
+ * @param matches1to2 Matches from the first image to the second one, which
+ * means that <code>keypoints1[i]</code> has a corresponding point in
+ * <code>keypoints2[matches[i]]</code>.
+ * @param outImg Output image. Its content depends on the <code>flags</code>
+ * value defining what is drawn in the output image. See possible
+ * <code>flags</code> bit values below.
+ * @param matchColor Color of matches (lines and connected keypoints). If
+ * <code>matchColor==Scalar.all(-1)</code>, the color is generated randomly.
+ * @param singlePointColor Color of single keypoints (circles), which means that
+ * keypoints do not have the matches. If <code>singlePointColor==Scalar.all(-1)</code>,
+ * the color is generated randomly.
+ * @param matchesMask Mask determining which matches are drawn. If the mask is
+ * empty, all matches are drawn.
+ * @param flags Flags setting drawing features. Possible <code>flags</code> bit
+ * values are defined by <code>DrawMatchesFlags</code>.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html#drawmatches">org.opencv.features2d.Features2d.drawMatches</a>
+ */
+    public static void drawMatches2(Mat img1, MatOfKeyPoint keypoints1, Mat img2, MatOfKeyPoint keypoints2, List<MatOfDMatch> matches1to2, Mat outImg, Scalar matchColor, Scalar singlePointColor, List<MatOfByte> matchesMask, int flags)
+    {
+        Mat keypoints1_mat = keypoints1;
+        Mat keypoints2_mat = keypoints2;
+        List<Mat> matches1to2_tmplm = new ArrayList<Mat>((matches1to2 != null) ? matches1to2.size() : 0);
+        Mat matches1to2_mat = Converters.vector_vector_DMatch_to_Mat(matches1to2, matches1to2_tmplm);
+        List<Mat> matchesMask_tmplm = new ArrayList<Mat>((matchesMask != null) ? matchesMask.size() : 0);
+        Mat matchesMask_mat = Converters.vector_vector_char_to_Mat(matchesMask, matchesMask_tmplm);
+        drawMatches2_0(img1.nativeObj, keypoints1_mat.nativeObj, img2.nativeObj, keypoints2_mat.nativeObj, matches1to2_mat.nativeObj, outImg.nativeObj, matchColor.val[0], matchColor.val[1], matchColor.val[2], matchColor.val[3], singlePointColor.val[0], singlePointColor.val[1], singlePointColor.val[2], singlePointColor.val[3], matchesMask_mat.nativeObj, flags);
+
+        return;
+    }
+
+/**
+ * <p>Draws the found matches of keypoints from two images.</p>
+ *
+ * <p>This function draws matches of keypoints from two images in the output image.
+ * Match is a line connecting two keypoints (circles). The structure
+ * <code>DrawMatchesFlags</code> is defined as follows: struct DrawMatchesFlags
+ * <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>enum</p>
+ *
+ *
+ * <p>DEFAULT = 0, // Output image matrix will be created (Mat.create),</p>
+ *
+ * <p>// i.e. existing memory of output image may be reused.</p>
+ *
+ * <p>// Two source images, matches, and single keypoints</p>
+ *
+ * <p>// will be drawn.</p>
+ *
+ * <p>// For each keypoint, only the center point will be</p>
+ *
+ * <p>// drawn (without a circle around the keypoint with the</p>
+ *
+ * <p>// keypoint size and orientation).</p>
+ *
+ * <p>DRAW_OVER_OUTIMG = 1, // Output image matrix will not be</p>
+ *
+ * <p>// created (using Mat.create). Matches will be drawn</p>
+ *
+ * <p>// on existing content of output image.</p>
+ *
+ * <p>NOT_DRAW_SINGLE_POINTS = 2, // Single keypoints will not be drawn.</p>
+ *
+ * <p>DRAW_RICH_KEYPOINTS = 4 // For each keypoint, the circle around</p>
+ *
+ * <p>// keypoint with keypoint size and orientation will</p>
+ *
+ * <p>// be drawn.</p>
+ *
+ * <p>};</p>
+ *
+ * <p>};</p>
+ *
+ * <p></code></p>
+ *
+ * @param img1 First source image.
+ * @param keypoints1 Keypoints from the first source image.
+ * @param img2 Second source image.
+ * @param keypoints2 Keypoints from the second source image.
+ * @param matches1to2 Matches from the first image to the second one, which
+ * means that <code>keypoints1[i]</code> has a corresponding point in
+ * <code>keypoints2[matches[i]]</code>.
+ * @param outImg Output image. Its content depends on the <code>flags</code>
+ * value defining what is drawn in the output image. See possible
+ * <code>flags</code> bit values below.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/drawing_function_of_keypoints_and_matches.html#drawmatches">org.opencv.features2d.Features2d.drawMatches</a>
+ */
+    public static void drawMatches2(Mat img1, MatOfKeyPoint keypoints1, Mat img2, MatOfKeyPoint keypoints2, List<MatOfDMatch> matches1to2, Mat outImg)
+    {
+        Mat keypoints1_mat = keypoints1;
+        Mat keypoints2_mat = keypoints2;
+        List<Mat> matches1to2_tmplm = new ArrayList<Mat>((matches1to2 != null) ? matches1to2.size() : 0);
+        Mat matches1to2_mat = Converters.vector_vector_DMatch_to_Mat(matches1to2, matches1to2_tmplm);
+        drawMatches2_1(img1.nativeObj, keypoints1_mat.nativeObj, img2.nativeObj, keypoints2_mat.nativeObj, matches1to2_mat.nativeObj, outImg.nativeObj);
+
+        return;
+    }
+
+
+
+
+    // C++:  void drawKeypoints(Mat image, vector_KeyPoint keypoints, Mat outImage, Scalar color = Scalar::all(-1), int flags = 0)
+    private static native void drawKeypoints_0(long image_nativeObj, long keypoints_mat_nativeObj, long outImage_nativeObj, double color_val0, double color_val1, double color_val2, double color_val3, int flags);
+    private static native void drawKeypoints_1(long image_nativeObj, long keypoints_mat_nativeObj, long outImage_nativeObj);
+
+    // C++:  void drawMatches(Mat img1, vector_KeyPoint keypoints1, Mat img2, vector_KeyPoint keypoints2, vector_DMatch matches1to2, Mat outImg, Scalar matchColor = Scalar::all(-1), Scalar singlePointColor = Scalar::all(-1), vector_char matchesMask = vector<char>(), int flags = 0)
+    private static native void drawMatches_0(long img1_nativeObj, long keypoints1_mat_nativeObj, long img2_nativeObj, long keypoints2_mat_nativeObj, long matches1to2_mat_nativeObj, long outImg_nativeObj, double matchColor_val0, double matchColor_val1, double matchColor_val2, double matchColor_val3, double singlePointColor_val0, double singlePointColor_val1, double singlePointColor_val2, double singlePointColor_val3, long matchesMask_mat_nativeObj, int flags);
+    private static native void drawMatches_1(long img1_nativeObj, long keypoints1_mat_nativeObj, long img2_nativeObj, long keypoints2_mat_nativeObj, long matches1to2_mat_nativeObj, long outImg_nativeObj);
+
+    // C++:  void drawMatches(Mat img1, vector_KeyPoint keypoints1, Mat img2, vector_KeyPoint keypoints2, vector_vector_DMatch matches1to2, Mat outImg, Scalar matchColor = Scalar::all(-1), Scalar singlePointColor = Scalar::all(-1), vector_vector_char matchesMask = vector<vector<char> >(), int flags = 0)
+    private static native void drawMatches2_0(long img1_nativeObj, long keypoints1_mat_nativeObj, long img2_nativeObj, long keypoints2_mat_nativeObj, long matches1to2_mat_nativeObj, long outImg_nativeObj, double matchColor_val0, double matchColor_val1, double matchColor_val2, double matchColor_val3, double singlePointColor_val0, double singlePointColor_val1, double singlePointColor_val2, double singlePointColor_val3, long matchesMask_mat_nativeObj, int flags);
+    private static native void drawMatches2_1(long img1_nativeObj, long keypoints1_mat_nativeObj, long img2_nativeObj, long keypoints2_mat_nativeObj, long matches1to2_mat_nativeObj, long outImg_nativeObj);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/GenericDescriptorMatcher.class b/OpenCV/src/main/resources/org/opencv/features2d/GenericDescriptorMatcher.class
new file mode 100644
index 0000000..88d0cf1
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/features2d/GenericDescriptorMatcher.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/GenericDescriptorMatcher.java b/OpenCV/src/main/resources/org/opencv/features2d/GenericDescriptorMatcher.java
new file mode 100644
index 0000000..a5cfc53
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/features2d/GenericDescriptorMatcher.java
@@ -0,0 +1,861 @@
+
+//
+// This file is auto-generated. Please don't modify it!
+//
+package org.opencv.features2d;
+
+import java.lang.String;
+import java.util.ArrayList;
+import java.util.List;
+import org.opencv.core.Mat;
+import org.opencv.core.MatOfDMatch;
+import org.opencv.core.MatOfKeyPoint;
+import org.opencv.utils.Converters;
+
+// C++: class javaGenericDescriptorMatcher
+/**
+ * <p>Abstract interface for extracting and matching a keypoint descriptor. There
+ * are also "DescriptorExtractor" and "DescriptorMatcher" for these purposes but
+ * their interfaces are intended for descriptors represented as vectors in a
+ * multidimensional space. <code>GenericDescriptorMatcher</code> is a more
+ * generic interface for descriptors. <code>DescriptorMatcher</code> and
+ * <code>GenericDescriptorMatcher</code> have two groups of match methods: for
+ * matching keypoints of an image with another image or with an image set.</p>
+ *
+ * <p>class GenericDescriptorMatcher <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ *
+ * <p>public:</p>
+ *
+ * <p>GenericDescriptorMatcher();</p>
+ *
+ * <p>virtual ~GenericDescriptorMatcher();</p>
+ *
+ * <p>virtual void add(const vector<Mat>& images,</p>
+ *
+ * <p>vector<vector<KeyPoint> >& keypoints);</p>
+ *
+ * <p>const vector<Mat>& getTrainImages() const;</p>
+ *
+ * <p>const vector<vector<KeyPoint> >& getTrainKeypoints() const;</p>
+ *
+ * <p>virtual void clear();</p>
+ *
+ * <p>virtual void train() = 0;</p>
+ *
+ * <p>virtual bool isMaskSupported() = 0;</p>
+ *
+ * <p>void classify(const Mat& queryImage,</p>
+ *
+ * <p>vector<KeyPoint>& queryKeypoints,</p>
+ *
+ * <p>const Mat& trainImage,</p>
+ *
+ * <p>vector<KeyPoint>& trainKeypoints) const;</p>
+ *
+ * <p>void classify(const Mat& queryImage,</p>
+ *
+ * <p>vector<KeyPoint>& queryKeypoints);</p>
+ *
+ * <p>/ *</p>
+ * <ul>
+ *   <li> Group of methods to match keypoints from an image pair.
+ *   <li> /
+ * </ul>
+ *
+ * <p>void match(const Mat& queryImage, vector<KeyPoint>& queryKeypoints,</p>
+ *
+ * <p>const Mat& trainImage, vector<KeyPoint>& trainKeypoints,</p>
+ *
+ * <p>vector<DMatch>& matches, const Mat& mask=Mat()) const;</p>
+ *
+ * <p>void knnMatch(const Mat& queryImage, vector<KeyPoint>& queryKeypoints,</p>
+ *
+ * <p>const Mat& trainImage, vector<KeyPoint>& trainKeypoints,</p>
+ *
+ * <p>vector<vector<DMatch> >& matches, int k,</p>
+ *
+ * <p>const Mat& mask=Mat(), bool compactResult=false) const;</p>
+ *
+ * <p>void radiusMatch(const Mat& queryImage, vector<KeyPoint>& queryKeypoints,</p>
+ *
+ * <p>const Mat& trainImage, vector<KeyPoint>& trainKeypoints,</p>
+ *
+ * <p>vector<vector<DMatch> >& matches, float maxDistance,</p>
+ *
+ * <p>const Mat& mask=Mat(), bool compactResult=false) const;</p>
+ *
+ * <p>/ *</p>
+ * <ul>
+ *   <li> Group of methods to match keypoints from one image to an image set.
+ *   <li> /
+ * </ul>
+ *
+ * <p>void match(const Mat& queryImage, vector<KeyPoint>& queryKeypoints,</p>
+ *
+ * <p>vector<DMatch>& matches, const vector<Mat>& masks=vector<Mat>());</p>
+ *
+ * <p>void knnMatch(const Mat& queryImage, vector<KeyPoint>& queryKeypoints,</p>
+ *
+ * <p>vector<vector<DMatch> >& matches, int k,</p>
+ *
+ * <p>const vector<Mat>& masks=vector<Mat>(), bool compactResult=false);</p>
+ *
+ * <p>void radiusMatch(const Mat& queryImage, vector<KeyPoint>& queryKeypoints,</p>
+ *
+ * <p>vector<vector<DMatch> >& matches, float maxDistance,</p>
+ *
+ * <p>const vector<Mat>& masks=vector<Mat>(), bool compactResult=false);</p>
+ *
+ * <p>virtual void read(const FileNode&);</p>
+ *
+ * <p>virtual void write(FileStorage&) const;</p>
+ *
+ * <p>virtual Ptr<GenericDescriptorMatcher> clone(bool emptyTrainData=false) const
+ * = 0;</p>
+ *
+ * <p>protected:...</p>
+ *
+ * <p>};</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher">org.opencv.features2d.GenericDescriptorMatcher</a>
+ */
+public class GenericDescriptorMatcher {
+
+    protected final long nativeObj;
+    protected GenericDescriptorMatcher(long addr) { nativeObj = addr; }
+
+
+    public static final int
+            ONEWAY = 1,
+            FERN = 2;
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::add(vector_Mat images, vector_vector_KeyPoint keypoints)
+    //
+
+/**
+ * <p>Adds images and their keypoints to the training collection stored in the
+ * class instance.</p>
+ *
+ * @param images Image collection.
+ * @param keypoints Point collection. It is assumed that <code>keypoints[i]</code>
+ * are keypoints detected in the image <code>images[i]</code>.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-add">org.opencv.features2d.GenericDescriptorMatcher.add</a>
+ */
+    public  void add(List<Mat> images, List<MatOfKeyPoint> keypoints)
+    {
+        Mat images_mat = Converters.vector_Mat_to_Mat(images);
+        List<Mat> keypoints_tmplm = new ArrayList<Mat>((keypoints != null) ? keypoints.size() : 0);
+        Mat keypoints_mat = Converters.vector_vector_KeyPoint_to_Mat(keypoints, keypoints_tmplm);
+        add_0(nativeObj, images_mat.nativeObj, keypoints_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::classify(Mat queryImage, vector_KeyPoint& queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints)
+    //
+
+/**
+ * <p>Classifies keypoints from a query set.</p>
+ *
+ * <p>The method classifies each keypoint from a query set. The first variant of
+ * the method takes a train image and its keypoints as an input argument. The
+ * second variant uses the internally stored training collection that can be
+ * built using the <code>GenericDescriptorMatcher.add</code> method.</p>
+ *
+ * <p>The methods do the following:</p>
+ * <ul>
+ *   <li> Call the <code>GenericDescriptorMatcher.match</code> method to find
+ * correspondence between the query set and the training set.
+ *   <li> Set the <code>class_id</code> field of each keypoint from the query
+ * set to <code>class_id</code> of the corresponding keypoint from the training
+ * set.
+ * </ul>
+ *
+ * @param queryImage Query image.
+ * @param queryKeypoints Keypoints from a query image.
+ * @param trainImage Train image.
+ * @param trainKeypoints Keypoints from a train image.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-classify">org.opencv.features2d.GenericDescriptorMatcher.classify</a>
+ */
+    public  void classify(Mat queryImage, MatOfKeyPoint queryKeypoints, Mat trainImage, MatOfKeyPoint trainKeypoints)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat trainKeypoints_mat = trainKeypoints;
+        classify_0(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, trainImage.nativeObj, trainKeypoints_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::classify(Mat queryImage, vector_KeyPoint& queryKeypoints)
+    //
+
+/**
+ * <p>Classifies keypoints from a query set.</p>
+ *
+ * <p>The method classifies each keypoint from a query set. The first variant of
+ * the method takes a train image and its keypoints as an input argument. The
+ * second variant uses the internally stored training collection that can be
+ * built using the <code>GenericDescriptorMatcher.add</code> method.</p>
+ *
+ * <p>The methods do the following:</p>
+ * <ul>
+ *   <li> Call the <code>GenericDescriptorMatcher.match</code> method to find
+ * correspondence between the query set and the training set.
+ *   <li> Set the <code>class_id</code> field of each keypoint from the query
+ * set to <code>class_id</code> of the corresponding keypoint from the training
+ * set.
+ * </ul>
+ *
+ * @param queryImage Query image.
+ * @param queryKeypoints Keypoints from a query image.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-classify">org.opencv.features2d.GenericDescriptorMatcher.classify</a>
+ */
+    public  void classify(Mat queryImage, MatOfKeyPoint queryKeypoints)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        classify_1(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::clear()
+    //
+
+/**
+ * <p>Clears a train collection (images and keypoints).</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-clear">org.opencv.features2d.GenericDescriptorMatcher.clear</a>
+ */
+    public  void clear()
+    {
+
+        clear_0(nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  javaGenericDescriptorMatcher* javaGenericDescriptorMatcher::jclone(bool emptyTrainData = false)
+    //
+
+    public  GenericDescriptorMatcher clone(boolean emptyTrainData)
+    {
+
+        GenericDescriptorMatcher retVal = new GenericDescriptorMatcher(clone_0(nativeObj, emptyTrainData));
+
+        return retVal;
+    }
+
+    public  GenericDescriptorMatcher clone()
+    {
+
+        GenericDescriptorMatcher retVal = new GenericDescriptorMatcher(clone_1(nativeObj));
+
+        return retVal;
+    }
+
+
+    //
+    // C++: static javaGenericDescriptorMatcher* javaGenericDescriptorMatcher::create(int matcherType)
+    //
+
+    public static GenericDescriptorMatcher create(int matcherType)
+    {
+
+        GenericDescriptorMatcher retVal = new GenericDescriptorMatcher(create_0(matcherType));
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  bool javaGenericDescriptorMatcher::empty()
+    //
+
+    public  boolean empty()
+    {
+
+        boolean retVal = empty_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  vector_Mat javaGenericDescriptorMatcher::getTrainImages()
+    //
+
+/**
+ * <p>Returns a train image collection.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-gettrainimages">org.opencv.features2d.GenericDescriptorMatcher.getTrainImages</a>
+ */
+    public  List<Mat> getTrainImages()
+    {
+        List<Mat> retVal = new ArrayList<Mat>();
+        Mat retValMat = new Mat(getTrainImages_0(nativeObj));
+        Converters.Mat_to_vector_Mat(retValMat, retVal);
+        return retVal;
+    }
+
+
+    //
+    // C++:  vector_vector_KeyPoint javaGenericDescriptorMatcher::getTrainKeypoints()
+    //
+
+/**
+ * <p>Returns a train keypoints collection.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-gettrainkeypoints">org.opencv.features2d.GenericDescriptorMatcher.getTrainKeypoints</a>
+ */
+    public  List<MatOfKeyPoint> getTrainKeypoints()
+    {
+        List<MatOfKeyPoint> retVal = new ArrayList<MatOfKeyPoint>();
+        Mat retValMat = new Mat(getTrainKeypoints_0(nativeObj));
+        Converters.Mat_to_vector_vector_KeyPoint(retValMat, retVal);
+        return retVal;
+    }
+
+
+    //
+    // C++:  bool javaGenericDescriptorMatcher::isMaskSupported()
+    //
+
+/**
+ * <p>Returns <code>true</code> if a generic descriptor matcher supports masking
+ * permissible matches.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-ismasksupported">org.opencv.features2d.GenericDescriptorMatcher.isMaskSupported</a>
+ */
+    public  boolean isMaskSupported()
+    {
+
+        boolean retVal = isMaskSupported_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::knnMatch(Mat queryImage, vector_KeyPoint queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints, vector_vector_DMatch& matches, int k, Mat mask = Mat(), bool compactResult = false)
+    //
+
+/**
+ * <p>Finds the <code>k</code> best matches for each query keypoint.</p>
+ *
+ * <p>The methods are extended variants of <code>GenericDescriptorMatch.match</code>.
+ * The parameters are similar, and the semantics is similar to <code>DescriptorMatcher.knnMatch</code>.
+ * But this class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param trainImage a trainImage
+ * @param trainKeypoints a trainKeypoints
+ * @param matches a matches
+ * @param k a k
+ * @param mask a mask
+ * @param compactResult a compactResult
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-knnmatch">org.opencv.features2d.GenericDescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, Mat trainImage, MatOfKeyPoint trainKeypoints, List<MatOfDMatch> matches, int k, Mat mask, boolean compactResult)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat trainKeypoints_mat = trainKeypoints;
+        Mat matches_mat = new Mat();
+        knnMatch_0(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, trainImage.nativeObj, trainKeypoints_mat.nativeObj, matches_mat.nativeObj, k, mask.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>Finds the <code>k</code> best matches for each query keypoint.</p>
+ *
+ * <p>The methods are extended variants of <code>GenericDescriptorMatch.match</code>.
+ * The parameters are similar, and the semantics is similar to <code>DescriptorMatcher.knnMatch</code>.
+ * But this class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param trainImage a trainImage
+ * @param trainKeypoints a trainKeypoints
+ * @param matches a matches
+ * @param k a k
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-knnmatch">org.opencv.features2d.GenericDescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, Mat trainImage, MatOfKeyPoint trainKeypoints, List<MatOfDMatch> matches, int k)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat trainKeypoints_mat = trainKeypoints;
+        Mat matches_mat = new Mat();
+        knnMatch_1(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, trainImage.nativeObj, trainKeypoints_mat.nativeObj, matches_mat.nativeObj, k);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::knnMatch(Mat queryImage, vector_KeyPoint queryKeypoints, vector_vector_DMatch& matches, int k, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    //
+
+/**
+ * <p>Finds the <code>k</code> best matches for each query keypoint.</p>
+ *
+ * <p>The methods are extended variants of <code>GenericDescriptorMatch.match</code>.
+ * The parameters are similar, and the semantics is similar to <code>DescriptorMatcher.knnMatch</code>.
+ * But this class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param matches a matches
+ * @param k a k
+ * @param masks a masks
+ * @param compactResult a compactResult
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-knnmatch">org.opencv.features2d.GenericDescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, List<MatOfDMatch> matches, int k, List<Mat> masks, boolean compactResult)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat matches_mat = new Mat();
+        Mat masks_mat = Converters.vector_Mat_to_Mat(masks);
+        knnMatch_2(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, matches_mat.nativeObj, k, masks_mat.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>Finds the <code>k</code> best matches for each query keypoint.</p>
+ *
+ * <p>The methods are extended variants of <code>GenericDescriptorMatch.match</code>.
+ * The parameters are similar, and the semantics is similar to <code>DescriptorMatcher.knnMatch</code>.
+ * But this class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param matches a matches
+ * @param k a k
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-knnmatch">org.opencv.features2d.GenericDescriptorMatcher.knnMatch</a>
+ */
+    public  void knnMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, List<MatOfDMatch> matches, int k)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat matches_mat = new Mat();
+        knnMatch_3(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, matches_mat.nativeObj, k);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::match(Mat queryImage, vector_KeyPoint queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints, vector_DMatch& matches, Mat mask = Mat())
+    //
+
+/**
+ * <p>Finds the best match in the training set for each keypoint from the query
+ * set.</p>
+ *
+ * <p>The methods find the best match for each query keypoint. In the first variant
+ * of the method, a train image and its keypoints are the input arguments. In
+ * the second variant, query keypoints are matched to the internally stored
+ * training collection that can be built using the <code>GenericDescriptorMatcher.add</code>
+ * method. Optional mask (or masks) can be passed to specify which query and
+ * training descriptors can be matched. Namely, <code>queryKeypoints[i]</code>
+ * can be matched with <code>trainKeypoints[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryImage Query image.
+ * @param queryKeypoints Keypoints detected in <code>queryImage</code>.
+ * @param trainImage Train image. It is not added to a train image collection
+ * stored in the class object.
+ * @param trainKeypoints Keypoints detected in <code>trainImage</code>. They are
+ * not added to a train points collection stored in the class object.
+ * @param matches Matches. If a query descriptor (keypoint) is masked out in
+ * <code>mask</code>, match is added for this descriptor. So, <code>matches</code>
+ * size may be smaller than the query keypoints count.
+ * @param mask Mask specifying permissible matches between an input query and
+ * train keypoints.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-match">org.opencv.features2d.GenericDescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryImage, MatOfKeyPoint queryKeypoints, Mat trainImage, MatOfKeyPoint trainKeypoints, MatOfDMatch matches, Mat mask)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat trainKeypoints_mat = trainKeypoints;
+        Mat matches_mat = matches;
+        match_0(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, trainImage.nativeObj, trainKeypoints_mat.nativeObj, matches_mat.nativeObj, mask.nativeObj);
+
+        return;
+    }
+
+/**
+ * <p>Finds the best match in the training set for each keypoint from the query
+ * set.</p>
+ *
+ * <p>The methods find the best match for each query keypoint. In the first variant
+ * of the method, a train image and its keypoints are the input arguments. In
+ * the second variant, query keypoints are matched to the internally stored
+ * training collection that can be built using the <code>GenericDescriptorMatcher.add</code>
+ * method. Optional mask (or masks) can be passed to specify which query and
+ * training descriptors can be matched. Namely, <code>queryKeypoints[i]</code>
+ * can be matched with <code>trainKeypoints[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryImage Query image.
+ * @param queryKeypoints Keypoints detected in <code>queryImage</code>.
+ * @param trainImage Train image. It is not added to a train image collection
+ * stored in the class object.
+ * @param trainKeypoints Keypoints detected in <code>trainImage</code>. They are
+ * not added to a train points collection stored in the class object.
+ * @param matches Matches. If a query descriptor (keypoint) is masked out in
+ * <code>mask</code>, match is added for this descriptor. So, <code>matches</code>
+ * size may be smaller than the query keypoints count.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-match">org.opencv.features2d.GenericDescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryImage, MatOfKeyPoint queryKeypoints, Mat trainImage, MatOfKeyPoint trainKeypoints, MatOfDMatch matches)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat trainKeypoints_mat = trainKeypoints;
+        Mat matches_mat = matches;
+        match_1(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, trainImage.nativeObj, trainKeypoints_mat.nativeObj, matches_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::match(Mat queryImage, vector_KeyPoint queryKeypoints, vector_DMatch& matches, vector_Mat masks = vector<Mat>())
+    //
+
+/**
+ * <p>Finds the best match in the training set for each keypoint from the query
+ * set.</p>
+ *
+ * <p>The methods find the best match for each query keypoint. In the first variant
+ * of the method, a train image and its keypoints are the input arguments. In
+ * the second variant, query keypoints are matched to the internally stored
+ * training collection that can be built using the <code>GenericDescriptorMatcher.add</code>
+ * method. Optional mask (or masks) can be passed to specify which query and
+ * training descriptors can be matched. Namely, <code>queryKeypoints[i]</code>
+ * can be matched with <code>trainKeypoints[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryImage Query image.
+ * @param queryKeypoints Keypoints detected in <code>queryImage</code>.
+ * @param matches Matches. If a query descriptor (keypoint) is masked out in
+ * <code>mask</code>, match is added for this descriptor. So, <code>matches</code>
+ * size may be smaller than the query keypoints count.
+ * @param masks Set of masks. Each <code>masks[i]</code> specifies permissible
+ * matches between input query keypoints and stored train keypoints from the
+ * i-th image.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-match">org.opencv.features2d.GenericDescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryImage, MatOfKeyPoint queryKeypoints, MatOfDMatch matches, List<Mat> masks)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat matches_mat = matches;
+        Mat masks_mat = Converters.vector_Mat_to_Mat(masks);
+        match_2(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, matches_mat.nativeObj, masks_mat.nativeObj);
+
+        return;
+    }
+
+/**
+ * <p>Finds the best match in the training set for each keypoint from the query
+ * set.</p>
+ *
+ * <p>The methods find the best match for each query keypoint. In the first variant
+ * of the method, a train image and its keypoints are the input arguments. In
+ * the second variant, query keypoints are matched to the internally stored
+ * training collection that can be built using the <code>GenericDescriptorMatcher.add</code>
+ * method. Optional mask (or masks) can be passed to specify which query and
+ * training descriptors can be matched. Namely, <code>queryKeypoints[i]</code>
+ * can be matched with <code>trainKeypoints[j]</code> only if <code>mask.at<uchar>(i,j)</code>
+ * is non-zero.</p>
+ *
+ * @param queryImage Query image.
+ * @param queryKeypoints Keypoints detected in <code>queryImage</code>.
+ * @param matches Matches. If a query descriptor (keypoint) is masked out in
+ * <code>mask</code>, match is added for this descriptor. So, <code>matches</code>
+ * size may be smaller than the query keypoints count.
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-match">org.opencv.features2d.GenericDescriptorMatcher.match</a>
+ */
+    public  void match(Mat queryImage, MatOfKeyPoint queryKeypoints, MatOfDMatch matches)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat matches_mat = matches;
+        match_3(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, matches_mat.nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::radiusMatch(Mat queryImage, vector_KeyPoint queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints, vector_vector_DMatch& matches, float maxDistance, Mat mask = Mat(), bool compactResult = false)
+    //
+
+/**
+ * <p>For each query keypoint, finds the training keypoints not farther than the
+ * specified distance.</p>
+ *
+ * <p>The methods are similar to <code>DescriptorMatcher.radius</code>. But this
+ * class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param trainImage a trainImage
+ * @param trainKeypoints a trainKeypoints
+ * @param matches a matches
+ * @param maxDistance a maxDistance
+ * @param mask a mask
+ * @param compactResult a compactResult
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-radiusmatch">org.opencv.features2d.GenericDescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, Mat trainImage, MatOfKeyPoint trainKeypoints, List<MatOfDMatch> matches, float maxDistance, Mat mask, boolean compactResult)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat trainKeypoints_mat = trainKeypoints;
+        Mat matches_mat = new Mat();
+        radiusMatch_0(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, trainImage.nativeObj, trainKeypoints_mat.nativeObj, matches_mat.nativeObj, maxDistance, mask.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>For each query keypoint, finds the training keypoints not farther than the
+ * specified distance.</p>
+ *
+ * <p>The methods are similar to <code>DescriptorMatcher.radius</code>. But this
+ * class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param trainImage a trainImage
+ * @param trainKeypoints a trainKeypoints
+ * @param matches a matches
+ * @param maxDistance a maxDistance
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-radiusmatch">org.opencv.features2d.GenericDescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, Mat trainImage, MatOfKeyPoint trainKeypoints, List<MatOfDMatch> matches, float maxDistance)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat trainKeypoints_mat = trainKeypoints;
+        Mat matches_mat = new Mat();
+        radiusMatch_1(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, trainImage.nativeObj, trainKeypoints_mat.nativeObj, matches_mat.nativeObj, maxDistance);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::radiusMatch(Mat queryImage, vector_KeyPoint queryKeypoints, vector_vector_DMatch& matches, float maxDistance, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    //
+
+/**
+ * <p>For each query keypoint, finds the training keypoints not farther than the
+ * specified distance.</p>
+ *
+ * <p>The methods are similar to <code>DescriptorMatcher.radius</code>. But this
+ * class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param matches a matches
+ * @param maxDistance a maxDistance
+ * @param masks a masks
+ * @param compactResult a compactResult
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-radiusmatch">org.opencv.features2d.GenericDescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, List<MatOfDMatch> matches, float maxDistance, List<Mat> masks, boolean compactResult)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat matches_mat = new Mat();
+        Mat masks_mat = Converters.vector_Mat_to_Mat(masks);
+        radiusMatch_2(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, matches_mat.nativeObj, maxDistance, masks_mat.nativeObj, compactResult);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+/**
+ * <p>For each query keypoint, finds the training keypoints not farther than the
+ * specified distance.</p>
+ *
+ * <p>The methods are similar to <code>DescriptorMatcher.radius</code>. But this
+ * class does not require explicitly computed keypoint descriptors.</p>
+ *
+ * @param queryImage a queryImage
+ * @param queryKeypoints a queryKeypoints
+ * @param matches a matches
+ * @param maxDistance a maxDistance
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-radiusmatch">org.opencv.features2d.GenericDescriptorMatcher.radiusMatch</a>
+ */
+    public  void radiusMatch(Mat queryImage, MatOfKeyPoint queryKeypoints, List<MatOfDMatch> matches, float maxDistance)
+    {
+        Mat queryKeypoints_mat = queryKeypoints;
+        Mat matches_mat = new Mat();
+        radiusMatch_3(nativeObj, queryImage.nativeObj, queryKeypoints_mat.nativeObj, matches_mat.nativeObj, maxDistance);
+        Converters.Mat_to_vector_vector_DMatch(matches_mat, matches);
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::read(string fileName)
+    //
+
+/**
+ * <p>Reads a matcher object from a file node.</p>
+ *
+ * @param fileName a fileName
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-read">org.opencv.features2d.GenericDescriptorMatcher.read</a>
+ */
+    public  void read(String fileName)
+    {
+
+        read_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::train()
+    //
+
+/**
+ * <p>Trains descriptor matcher</p>
+ *
+ * <p>Prepares descriptor matcher, for example, creates a tree-based structure, to
+ * extract descriptors or to optimize descriptors matching.</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-train">org.opencv.features2d.GenericDescriptorMatcher.train</a>
+ */
+    public  void train()
+    {
+
+        train_0(nativeObj);
+
+        return;
+    }
+
+
+    //
+    // C++:  void javaGenericDescriptorMatcher::write(string fileName)
+    //
+
+/**
+ * <p>Writes a match object to a file storage.</p>
+ *
+ * @param fileName a fileName
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_generic_descriptor_matchers.html#genericdescriptormatcher-write">org.opencv.features2d.GenericDescriptorMatcher.write</a>
+ */
+    public  void write(String fileName)
+    {
+
+        write_0(nativeObj, fileName);
+
+        return;
+    }
+
+
+    @Override
+    protected void finalize() throws Throwable {
+        delete(nativeObj);
+    }
+
+
+
+    // C++:  void javaGenericDescriptorMatcher::add(vector_Mat images, vector_vector_KeyPoint keypoints)
+    private static native void add_0(long nativeObj, long images_mat_nativeObj, long keypoints_mat_nativeObj);
+
+    // C++:  void javaGenericDescriptorMatcher::classify(Mat queryImage, vector_KeyPoint& queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints)
+    private static native void classify_0(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long trainImage_nativeObj, long trainKeypoints_mat_nativeObj);
+
+    // C++:  void javaGenericDescriptorMatcher::classify(Mat queryImage, vector_KeyPoint& queryKeypoints)
+    private static native void classify_1(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj);
+
+    // C++:  void javaGenericDescriptorMatcher::clear()
+    private static native void clear_0(long nativeObj);
+
+    // C++:  javaGenericDescriptorMatcher* javaGenericDescriptorMatcher::jclone(bool emptyTrainData = false)
+    private static native long clone_0(long nativeObj, boolean emptyTrainData);
+    private static native long clone_1(long nativeObj);
+
+    // C++: static javaGenericDescriptorMatcher* javaGenericDescriptorMatcher::create(int matcherType)
+    private static native long create_0(int matcherType);
+
+    // C++:  bool javaGenericDescriptorMatcher::empty()
+    private static native boolean empty_0(long nativeObj);
+
+    // C++:  vector_Mat javaGenericDescriptorMatcher::getTrainImages()
+    private static native long getTrainImages_0(long nativeObj);
+
+    // C++:  vector_vector_KeyPoint javaGenericDescriptorMatcher::getTrainKeypoints()
+    private static native long getTrainKeypoints_0(long nativeObj);
+
+    // C++:  bool javaGenericDescriptorMatcher::isMaskSupported()
+    private static native boolean isMaskSupported_0(long nativeObj);
+
+    // C++:  void javaGenericDescriptorMatcher::knnMatch(Mat queryImage, vector_KeyPoint queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints, vector_vector_DMatch& matches, int k, Mat mask = Mat(), bool compactResult = false)
+    private static native void knnMatch_0(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long trainImage_nativeObj, long trainKeypoints_mat_nativeObj, long matches_mat_nativeObj, int k, long mask_nativeObj, boolean compactResult);
+    private static native void knnMatch_1(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long trainImage_nativeObj, long trainKeypoints_mat_nativeObj, long matches_mat_nativeObj, int k);
+
+    // C++:  void javaGenericDescriptorMatcher::knnMatch(Mat queryImage, vector_KeyPoint queryKeypoints, vector_vector_DMatch& matches, int k, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    private static native void knnMatch_2(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long matches_mat_nativeObj, int k, long masks_mat_nativeObj, boolean compactResult);
+    private static native void knnMatch_3(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long matches_mat_nativeObj, int k);
+
+    // C++:  void javaGenericDescriptorMatcher::match(Mat queryImage, vector_KeyPoint queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints, vector_DMatch& matches, Mat mask = Mat())
+    private static native void match_0(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long trainImage_nativeObj, long trainKeypoints_mat_nativeObj, long matches_mat_nativeObj, long mask_nativeObj);
+    private static native void match_1(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long trainImage_nativeObj, long trainKeypoints_mat_nativeObj, long matches_mat_nativeObj);
+
+    // C++:  void javaGenericDescriptorMatcher::match(Mat queryImage, vector_KeyPoint queryKeypoints, vector_DMatch& matches, vector_Mat masks = vector<Mat>())
+    private static native void match_2(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long matches_mat_nativeObj, long masks_mat_nativeObj);
+    private static native void match_3(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long matches_mat_nativeObj);
+
+    // C++:  void javaGenericDescriptorMatcher::radiusMatch(Mat queryImage, vector_KeyPoint queryKeypoints, Mat trainImage, vector_KeyPoint trainKeypoints, vector_vector_DMatch& matches, float maxDistance, Mat mask = Mat(), bool compactResult = false)
+    private static native void radiusMatch_0(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long trainImage_nativeObj, long trainKeypoints_mat_nativeObj, long matches_mat_nativeObj, float maxDistance, long mask_nativeObj, boolean compactResult);
+    private static native void radiusMatch_1(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long trainImage_nativeObj, long trainKeypoints_mat_nativeObj, long matches_mat_nativeObj, float maxDistance);
+
+    // C++:  void javaGenericDescriptorMatcher::radiusMatch(Mat queryImage, vector_KeyPoint queryKeypoints, vector_vector_DMatch& matches, float maxDistance, vector_Mat masks = vector<Mat>(), bool compactResult = false)
+    private static native void radiusMatch_2(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long matches_mat_nativeObj, float maxDistance, long masks_mat_nativeObj, boolean compactResult);
+    private static native void radiusMatch_3(long nativeObj, long queryImage_nativeObj, long queryKeypoints_mat_nativeObj, long matches_mat_nativeObj, float maxDistance);
+
+    // C++:  void javaGenericDescriptorMatcher::read(string fileName)
+    private static native void read_0(long nativeObj, String fileName);
+
+    // C++:  void javaGenericDescriptorMatcher::train()
+    private static native void train_0(long nativeObj);
+
+    // C++:  void javaGenericDescriptorMatcher::write(string fileName)
+    private static native void write_0(long nativeObj, String fileName);
+
+    // native support for java finalize()
+    private static native void delete(long nativeObj);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.class b/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.class
index 5783e06..994f1bb 100644
Binary files a/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.class and b/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.java b/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.java
index d9c4edd..d0f03ba 100644
--- a/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.java
+++ b/OpenCV/src/main/resources/org/opencv/features2d/KeyPoint.java
@@ -2,6 +2,28 @@ package org.opencv.features2d;
 
 import org.opencv.core.Point;
 
+/**
+ * <p>Data structure for salient point detectors.</p>
+ *
+ * <p>coordinates of the keypoint</p>
+ *
+ * <p>diameter of the meaningful keypoint neighborhood <code></p>
+ *
+ * <p>// C++ code:</p>
+ *
+ * <p>computed orientation of the keypoint (-1 if not applicable). Its possible
+ * values are in a range [0,360) degrees. It is measured relative to image
+ * coordinate system (y-axis is directed downward), ie in clockwise.</p>
+ *
+ * <p>the response by which the most strong keypoints have been selected. Can be
+ * used for further sorting or subsampling</p>
+ *
+ * <p>octave (pyramid layer) from which the keypoint has been extracted</p>
+ *
+ * <p>object id that can be used to clustered keypoints by an object they belong to</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint">org.opencv.features2d.KeyPoint</a>
+ */
 public class KeyPoint {
 
     /**
@@ -31,6 +53,20 @@ public class KeyPoint {
      */
     public int class_id;
 
+/**
+ * <p>The keypoint constructors</p>
+ *
+ * @param x x-coordinate of the keypoint
+ * @param y y-coordinate of the keypoint
+ * @param _size keypoint diameter
+ * @param _angle keypoint orientation
+ * @param _response keypoint detector response on the keypoint (that is,
+ * strength of the keypoint)
+ * @param _octave pyramid octave in which the keypoint has been detected
+ * @param _class_id object id
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint-keypoint">org.opencv.features2d.KeyPoint.KeyPoint</a>
+ */
     public KeyPoint(float x, float y, float _size, float _angle, float _response, int _octave, int _class_id)
     {
         pt = new Point(x, y);
@@ -41,26 +77,75 @@ public class KeyPoint {
         class_id = _class_id;
     }
 
+/**
+ * <p>The keypoint constructors</p>
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint-keypoint">org.opencv.features2d.KeyPoint.KeyPoint</a>
+ */
     public KeyPoint()
     {
         this(0, 0, 0, -1, 0, 0, -1);
     }
 
+/**
+ * <p>The keypoint constructors</p>
+ *
+ * @param x x-coordinate of the keypoint
+ * @param y y-coordinate of the keypoint
+ * @param _size keypoint diameter
+ * @param _angle keypoint orientation
+ * @param _response keypoint detector response on the keypoint (that is,
+ * strength of the keypoint)
+ * @param _octave pyramid octave in which the keypoint has been detected
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint-keypoint">org.opencv.features2d.KeyPoint.KeyPoint</a>
+ */
     public KeyPoint(float x, float y, float _size, float _angle, float _response, int _octave)
     {
         this(x, y, _size, _angle, _response, _octave, -1);
     }
 
+/**
+ * <p>The keypoint constructors</p>
+ *
+ * @param x x-coordinate of the keypoint
+ * @param y y-coordinate of the keypoint
+ * @param _size keypoint diameter
+ * @param _angle keypoint orientation
+ * @param _response keypoint detector response on the keypoint (that is,
+ * strength of the keypoint)
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint-keypoint">org.opencv.features2d.KeyPoint.KeyPoint</a>
+ */
     public KeyPoint(float x, float y, float _size, float _angle, float _response)
     {
         this(x, y, _size, _angle, _response, 0, -1);
     }
 
+/**
+ * <p>The keypoint constructors</p>
+ *
+ * @param x x-coordinate of the keypoint
+ * @param y y-coordinate of the keypoint
+ * @param _size keypoint diameter
+ * @param _angle keypoint orientation
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint-keypoint">org.opencv.features2d.KeyPoint.KeyPoint</a>
+ */
     public KeyPoint(float x, float y, float _size, float _angle)
     {
         this(x, y, _size, _angle, 0, 0, -1);
     }
 
+/**
+ * <p>The keypoint constructors</p>
+ *
+ * @param x x-coordinate of the keypoint
+ * @param y y-coordinate of the keypoint
+ * @param _size keypoint diameter
+ *
+ * @see <a href="http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#keypoint-keypoint">org.opencv.features2d.KeyPoint.KeyPoint</a>
+ */
     public KeyPoint(float x, float y, float _size)
     {
         this(x, y, _size, -1, 0, 0, -1);
diff --git a/OpenCV/src/main/resources/org/opencv/gpu/DeviceInfo.class b/OpenCV/src/main/resources/org/opencv/gpu/DeviceInfo.class
new file mode 100644
index 0000000..4f20927
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/gpu/DeviceInfo.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/gpu/DeviceInfo.java b/OpenCV/src/main/resources/org/opencv/gpu/DeviceInfo.java
new file mode 100644
index 0000000..109bd89
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/gpu/DeviceInfo.java
@@ -0,0 +1,231 @@
+package org.opencv.gpu;
+
+import java.lang.String;
+
+// C++: class DeviceInfo
+public class DeviceInfo {
+
+    protected final long nativeObj;
+    protected DeviceInfo(long addr) { nativeObj = addr; }
+
+
+    //
+    // C++:   DeviceInfo::DeviceInfo()
+    //
+
+    public   DeviceInfo()
+    {
+
+        nativeObj = DeviceInfo_0();
+
+        return;
+    }
+
+
+    //
+    // C++:   DeviceInfo::DeviceInfo(int device_id)
+    //
+
+    public   DeviceInfo(int device_id)
+    {
+
+        nativeObj = DeviceInfo_1(device_id);
+
+        return;
+    }
+
+
+    //
+    // C++:  int DeviceInfo::deviceID()
+    //
+
+    public  int deviceID()
+    {
+
+        int retVal = deviceID_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  size_t DeviceInfo::freeMemory()
+    //
+
+    public  long freeMemory()
+    {
+
+        long retVal = freeMemory_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  bool DeviceInfo::isCompatible()
+    //
+
+    public  boolean isCompatible()
+    {
+
+        boolean retVal = isCompatible_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  int DeviceInfo::majorVersion()
+    //
+
+    public  int majorVersion()
+    {
+
+        int retVal = majorVersion_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  int DeviceInfo::minorVersion()
+    //
+
+    public  int minorVersion()
+    {
+
+        int retVal = minorVersion_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  int DeviceInfo::multiProcessorCount()
+    //
+
+    public  int multiProcessorCount()
+    {
+
+        int retVal = multiProcessorCount_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  string DeviceInfo::name()
+    //
+
+    public  String name()
+    {
+
+        String retVal = name_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  void DeviceInfo::queryMemory(size_t& totalMemory, size_t& freeMemory)
+    //
+
+    public  void queryMemory(long totalMemory, long freeMemory)
+    {
+        double[] totalMemory_out = new double[1];
+        double[] freeMemory_out = new double[1];
+        queryMemory_0(nativeObj, totalMemory_out, freeMemory_out);
+        totalMemory = (long)totalMemory_out[0];
+        freeMemory = (long)freeMemory_out[0];
+    }
+
+
+    //
+    // C++:  size_t DeviceInfo::sharedMemPerBlock()
+    //
+
+    public  long sharedMemPerBlock()
+    {
+
+        long retVal = sharedMemPerBlock_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  bool DeviceInfo::supports(int feature_set)
+    //
+
+    public  boolean supports(int feature_set)
+    {
+
+        boolean retVal = supports_0(nativeObj, feature_set);
+
+        return retVal;
+    }
+
+
+    //
+    // C++:  size_t DeviceInfo::totalMemory()
+    //
+
+    public  long totalMemory()
+    {
+
+        long retVal = totalMemory_0(nativeObj);
+
+        return retVal;
+    }
+
+
+    @Override
+    protected void finalize() throws Throwable {
+        delete(nativeObj);
+    }
+
+
+
+    // C++:   DeviceInfo::DeviceInfo()
+    private static native long DeviceInfo_0();
+
+    // C++:   DeviceInfo::DeviceInfo(int device_id)
+    private static native long DeviceInfo_1(int device_id);
+
+    // C++:  int DeviceInfo::deviceID()
+    private static native int deviceID_0(long nativeObj);
+
+    // C++:  size_t DeviceInfo::freeMemory()
+    private static native long freeMemory_0(long nativeObj);
+
+    // C++:  bool DeviceInfo::isCompatible()
+    private static native boolean isCompatible_0(long nativeObj);
+
+    // C++:  int DeviceInfo::majorVersion()
+    private static native int majorVersion_0(long nativeObj);
+
+    // C++:  int DeviceInfo::minorVersion()
+    private static native int minorVersion_0(long nativeObj);
+
+    // C++:  int DeviceInfo::multiProcessorCount()
+    private static native int multiProcessorCount_0(long nativeObj);
+
+    // C++:  string DeviceInfo::name()
+    private static native String name_0(long nativeObj);
+
+    // C++:  void DeviceInfo::queryMemory(size_t& totalMemory, size_t& freeMemory)
+    private static native void queryMemory_0(long nativeObj, double[] totalMemory_out, double[] freeMemory_out);
+
+    // C++:  size_t DeviceInfo::sharedMemPerBlock()
+    private static native long sharedMemPerBlock_0(long nativeObj);
+
+    // C++:  bool DeviceInfo::supports(int feature_set)
+    private static native boolean supports_0(long nativeObj, int feature_set);
+
+    // C++:  size_t DeviceInfo::totalMemory()
+    private static native long totalMemory_0(long nativeObj);
+
+    // native support for java finalize()
+    private static native void delete(long nativeObj);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/gpu/Gpu.class b/OpenCV/src/main/resources/org/opencv/gpu/Gpu.class
new file mode 100644
index 0000000..de66d2b
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/gpu/Gpu.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/gpu/Gpu.java b/OpenCV/src/main/resources/org/opencv/gpu/Gpu.java
new file mode 100644
index 0000000..397560e
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/gpu/Gpu.java
@@ -0,0 +1,121 @@
+package org.opencv.gpu;
+
+public class Gpu {
+
+    public static final int
+            FEATURE_SET_COMPUTE_10 = 10,
+            FEATURE_SET_COMPUTE_11 = 11,
+            FEATURE_SET_COMPUTE_12 = 12,
+            FEATURE_SET_COMPUTE_13 = 13,
+            FEATURE_SET_COMPUTE_20 = 20,
+            FEATURE_SET_COMPUTE_21 = 21,
+            FEATURE_SET_COMPUTE_30 = 30,
+            FEATURE_SET_COMPUTE_35 = 35,
+            GLOBAL_ATOMICS = FEATURE_SET_COMPUTE_11,
+            SHARED_ATOMICS = FEATURE_SET_COMPUTE_12,
+            NATIVE_DOUBLE = FEATURE_SET_COMPUTE_13,
+            WARP_SHUFFLE_FUNCTIONS = FEATURE_SET_COMPUTE_30,
+            DYNAMIC_PARALLELISM = FEATURE_SET_COMPUTE_35;
+
+
+    //
+    // C++:  bool deviceSupports(int feature_set)
+    //
+
+    public static boolean deviceSupports(int feature_set)
+    {
+        boolean retVal = deviceSupports_0(feature_set);
+        return retVal;
+    }
+
+
+    //
+    // C++:  int getCudaEnabledDeviceCount()
+    //
+
+    public static int getCudaEnabledDeviceCount()
+    {
+        int retVal = getCudaEnabledDeviceCount_0();
+        return retVal;
+    }
+
+
+    //
+    // C++:  int getDevice()
+    //
+
+    public static int getDevice()
+    {
+        int retVal = getDevice_0();
+        return retVal;
+    }
+
+
+    //
+    // C++:  void printCudaDeviceInfo(int device)
+    //
+
+    public static void printCudaDeviceInfo(int device)
+    {
+        printCudaDeviceInfo_0(device);
+        return;
+    }
+
+
+    //
+    // C++:  void printShortCudaDeviceInfo(int device)
+    //
+
+    public static void printShortCudaDeviceInfo(int device)
+    {
+        printShortCudaDeviceInfo_0(device);
+        return;
+    }
+
+
+    //
+    // C++:  void resetDevice()
+    //
+
+    public static void resetDevice()
+    {
+        resetDevice_0();
+        return;
+    }
+
+
+    //
+    // C++:  void setDevice(int device)
+    //
+
+    public static void setDevice(int device)
+    {
+        setDevice_0(device);
+        return;
+    }
+
+
+
+
+    // C++:  bool deviceSupports(int feature_set)
+    private static native boolean deviceSupports_0(int feature_set);
+
+    // C++:  int getCudaEnabledDeviceCount()
+    private static native int getCudaEnabledDeviceCount_0();
+
+    // C++:  int getDevice()
+    private static native int getDevice_0();
+
+    // C++:  void printCudaDeviceInfo(int device)
+    private static native void printCudaDeviceInfo_0(int device);
+
+    // C++:  void printShortCudaDeviceInfo(int device)
+    private static native void printShortCudaDeviceInfo_0(int device);
+
+    // C++:  void resetDevice()
+    private static native void resetDevice_0();
+
+    // C++:  void setDevice(int device)
+    private static native void setDevice_0(int device);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/gpu/TargetArchs.class b/OpenCV/src/main/resources/org/opencv/gpu/TargetArchs.class
new file mode 100644
index 0000000..73dfe94
Binary files /dev/null and b/OpenCV/src/main/resources/org/opencv/gpu/TargetArchs.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/gpu/TargetArchs.java b/OpenCV/src/main/resources/org/opencv/gpu/TargetArchs.java
new file mode 100644
index 0000000..48141d5
--- /dev/null
+++ b/OpenCV/src/main/resources/org/opencv/gpu/TargetArchs.java
@@ -0,0 +1,132 @@
+package org.opencv.gpu;
+
+// C++: class TargetArchs
+public class TargetArchs {
+
+    protected final long nativeObj;
+    protected TargetArchs(long addr) { nativeObj = addr; }
+
+
+    //
+    // C++: static bool TargetArchs::builtWith(int feature_set)
+    //
+
+    public static boolean builtWith(int feature_set)
+    {
+        boolean retVal = builtWith_0(feature_set);
+        return retVal;
+    }
+
+
+    //
+    // C++: static bool TargetArchs::has(int major, int minor)
+    //
+
+    public static boolean has(int major, int minor)
+    {
+        boolean retVal = has_0(major, minor);
+        return retVal;
+    }
+
+
+    //
+    // C++: static bool TargetArchs::hasBin(int major, int minor)
+    //
+
+    public static boolean hasBin(int major, int minor)
+    {
+        boolean retVal = hasBin_0(major, minor);
+        return retVal;
+    }
+
+
+    //
+    // C++: static bool TargetArchs::hasEqualOrGreater(int major, int minor)
+    //
+
+    public static boolean hasEqualOrGreater(int major, int minor)
+    {
+        boolean retVal = hasEqualOrGreater_0(major, minor);
+        return retVal;
+    }
+
+
+    //
+    // C++: static bool TargetArchs::hasEqualOrGreaterBin(int major, int minor)
+    //
+
+    public static boolean hasEqualOrGreaterBin(int major, int minor)
+    {
+        boolean retVal = hasEqualOrGreaterBin_0(major, minor);
+        return retVal;
+    }
+
+
+    //
+    // C++: static bool TargetArchs::hasEqualOrGreaterPtx(int major, int minor)
+    //
+
+    public static boolean hasEqualOrGreaterPtx(int major, int minor)
+    {
+        boolean retVal = hasEqualOrGreaterPtx_0(major, minor);
+        return retVal;
+    }
+
+
+    //
+    // C++: static bool TargetArchs::hasEqualOrLessPtx(int major, int minor)
+    //
+
+    public static boolean hasEqualOrLessPtx(int major, int minor)
+    {
+        boolean retVal = hasEqualOrLessPtx_0(major, minor);
+        return retVal;
+    }
+
+
+    //
+    // C++: static bool TargetArchs::hasPtx(int major, int minor)
+    //
+
+    public static boolean hasPtx(int major, int minor)
+    {
+        boolean retVal = hasPtx_0(major, minor);
+        return retVal;
+    }
+
+
+    @Override
+    protected void finalize() throws Throwable {
+        delete(nativeObj);
+    }
+
+
+
+    // C++: static bool TargetArchs::builtWith(int feature_set)
+    private static native boolean builtWith_0(int feature_set);
+
+    // C++: static bool TargetArchs::has(int major, int minor)
+    private static native boolean has_0(int major, int minor);
+
+    // C++: static bool TargetArchs::hasBin(int major, int minor)
+    private static native boolean hasBin_0(int major, int minor);
+
+    // C++: static bool TargetArchs::hasEqualOrGreater(int major, int minor)
+    private static native boolean hasEqualOrGreater_0(int major, int minor);
+
+    // C++: static bool TargetArchs::hasEqualOrGreaterBin(int major, int minor)
+    private static native boolean hasEqualOrGreaterBin_0(int major, int minor);
+
+    // C++: static bool TargetArchs::hasEqualOrGreaterPtx(int major, int minor)
+    private static native boolean hasEqualOrGreaterPtx_0(int major, int minor);
+
+    // C++: static bool TargetArchs::hasEqualOrLessPtx(int major, int minor)
+    private static native boolean hasEqualOrLessPtx_0(int major, int minor);
+
+    // C++: static bool TargetArchs::hasPtx(int major, int minor)
+    private static native boolean hasPtx_0(int major, int minor);
+
+    // native support for java finalize()
+    private static native void delete(long nativeObj);
+
+}
diff --git a/OpenCV/src/main/resources/org/opencv/highgui/Highgui.class b/OpenCV/src/main/resources/org/opencv/highgui/Highgui.class
index eed9f47..d094c87 100644
Binary files a/OpenCV/src/main/resources/org/opencv/highgui/Highgui.class and b/OpenCV/src/main/resources/org/opencv/highgui/Highgui.class differ
diff --git a/OpenCV/src/main/resources/org/opencv/highgui/Highgui.java b/OpenCV/src/main/resources/org/opencv/highgui/Highgui.java
index 53458c5..1d848b3 100644
--- a/OpenCV/src/main/resources/org/opencv/highgui/Highgui.java
+++ b/OpenCV/src/main/resources/org/opencv/highgui/Highgui.java
@@ -98,6 +98,13 @@ public class Highgui {
             CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX = 10004,
             CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH = 10005,
             CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH = 10006,
+            CV_CAP_PROP_INTELPERC_PROFILE_COUNT = 11001,
+            CV_CAP_PROP_INTELPERC_PROFILE_IDX = 11002,
+            CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE = 11003,
+            CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE = 11004,
+            CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD = 11005,
+            CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ = 11006,
+            CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT = 11007,
             CV_CAP_ANDROID_COLOR_FRAME_BGR = 0,
             CV_CAP_ANDROID_COLOR_FRAME = CV_CAP_ANDROID_COLOR_FRAME_BGR,
             CV_CAP_ANDROID_GREY_FRAME = 1,
diff --git a/OpenCV/src/main/resources/org/opencv/imgproc/Imgproc.java b/OpenCV/src/main/resources/org/opencv/imgproc/Imgproc.java
index a7d4f4e..a99dad8 100644
--- a/OpenCV/src/main/resources/org/opencv/imgproc/Imgproc.java
+++ b/OpenCV/src/main/resources/org/opencv/imgproc/Imgproc.java
@@ -392,7 +392,7 @@ public class Imgproc {
  *   <li> An example on using the canny edge detector can be found at
  * opencv_source_code/samples/cpp/edge.cpp
  *   <li> (Python) An example on using the canny edge detector can be found at
- * opencv_source_code/samples/cpp/edge.py
+ * opencv_source_code/samples/python/edge.py
  * </ul>
  *
  * @param image single-channel 8-bit input image.
@@ -431,7 +431,7 @@ public class Imgproc {
  *   <li> An example on using the canny edge detector can be found at
  * opencv_source_code/samples/cpp/edge.cpp
  *   <li> (Python) An example on using the canny edge detector can be found at
- * opencv_source_code/samples/cpp/edge.py
+ * opencv_source_code/samples/python/edge.py
  * </ul>
  *
  * @param image single-channel 8-bit input image.

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/sikuli.git



More information about the pkg-java-commits mailing list