From 36890cc959d94198cd95e676311090fc2aed6156 Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Wed, 14 Mar 2012 07:37:48 +0000 Subject: [PATCH] (#1636) Java API: adding undistortPoints() support and smoke test; minor improvements in Java stuff --- .../imgproc/include/opencv2/imgproc/imgproc.hpp | 6 ++--- .../src/org/opencv/test/android/UtilsTest.java | 8 +++---- .../BruteForceDescriptorMatcherTest.java | 28 ++++++++++++++++++---- .../src/org/opencv/test/imgproc/ImgprocTest.java | 18 ++++++++++++++ modules/java/gen_java.py | 2 +- modules/java/src/java/utils+Converters.java | 5 ++++ 6 files changed, 54 insertions(+), 13 deletions(-) diff --git a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp index 1acc017..87779e8 100644 --- a/modules/imgproc/include/opencv2/imgproc/imgproc.hpp +++ b/modules/imgproc/include/opencv2/imgproc/imgproc.hpp @@ -656,9 +656,9 @@ CV_EXPORTS_W Mat getDefaultNewCameraMatrix( InputArray cameraMatrix, Size imgsiz bool centerPrincipalPoint=false ); //! returns points' coordinates after lens distortion correction -CV_EXPORTS void undistortPoints( InputArray src, OutputArray dst, - InputArray cameraMatrix, InputArray distCoeffs, - InputArray R=noArray(), InputArray P=noArray()); +CV_EXPORTS_W void undistortPoints( InputArray src, OutputArray dst, + InputArray cameraMatrix, InputArray distCoeffs, + InputArray R=noArray(), InputArray P=noArray()); template<> CV_EXPORTS void Ptr::delete_obj(); diff --git a/modules/java/android_test/src/org/opencv/test/android/UtilsTest.java b/modules/java/android_test/src/org/opencv/test/android/UtilsTest.java index 977e322..8c9b2b7 100644 --- a/modules/java/android_test/src/org/opencv/test/android/UtilsTest.java +++ b/modules/java/android_test/src/org/opencv/test/android/UtilsTest.java @@ -55,7 +55,7 @@ public class UtilsTest extends OpenCVTestCase { public void testMatToBitmap() { Mat imgBGR = Highgui.imread( OpenCVTestRunner.LENA_PATH ); - assertTrue(imgBGR.channels() == 3); + assertTrue(imgBGR != null && !imgBGR.empty() && imgBGR.channels() == 3); Mat m16 = new Mat(imgBGR.rows(), imgBGR.cols(), CvType.CV_8UC4); Mat m32 = new Mat(imgBGR.rows(), imgBGR.cols(), CvType.CV_8UC4); @@ -71,7 +71,7 @@ public class UtilsTest extends OpenCVTestCase { // RGBA Mat imgRGBA = new Mat(); Imgproc.cvtColor(imgBGR, imgRGBA, Imgproc.COLOR_BGR2RGBA); - assertTrue(imgRGBA.channels() == 4); + assertTrue(!imgRGBA.empty() && imgRGBA.channels() == 4); bmp16.eraseColor(Color.BLACK); m16.setTo(s0); Utils.matToBitmap(imgRGBA, bmp16); Utils.bitmapToMat(bmp16, m16); @@ -89,7 +89,7 @@ public class UtilsTest extends OpenCVTestCase { // RGB Mat imgRGB = new Mat(); Imgproc.cvtColor(imgBGR, imgRGB, Imgproc.COLOR_BGR2RGB); - assertTrue(imgRGB.channels() == 3); + assertTrue(!imgRGB.empty() && imgRGB.channels() == 3); bmp16.eraseColor(Color.BLACK); m16.setTo(s0); Utils.matToBitmap(imgRGB, bmp16); Utils.bitmapToMat(bmp16, m16); @@ -107,7 +107,7 @@ public class UtilsTest extends OpenCVTestCase { // Gray Mat imgGray = new Mat(); Imgproc.cvtColor(imgBGR, imgGray, Imgproc.COLOR_BGR2GRAY); - assertTrue(imgGray.channels() == 1); + assertTrue(!imgGray.empty() && imgGray.channels() == 1); Mat tmp = new Mat(); bmp16.eraseColor(Color.BLACK); m16.setTo(s0); diff --git a/modules/java/android_test/src/org/opencv/test/features2d/BruteForceDescriptorMatcherTest.java b/modules/java/android_test/src/org/opencv/test/features2d/BruteForceDescriptorMatcherTest.java index 0f6b8f2..1c2d115 100644 --- a/modules/java/android_test/src/org/opencv/test/features2d/BruteForceDescriptorMatcherTest.java +++ b/modules/java/android_test/src/org/opencv/test/features2d/BruteForceDescriptorMatcherTest.java @@ -1,5 +1,9 @@ package org.opencv.test.features2d; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; @@ -13,10 +17,6 @@ import org.opencv.features2d.KeyPoint; import org.opencv.test.OpenCVTestCase; import org.opencv.test.OpenCVTestRunner; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - public class BruteForceDescriptorMatcherTest extends OpenCVTestCase { DescriptorMatcher matcher; @@ -163,7 +163,25 @@ public class BruteForceDescriptorMatcherTest extends OpenCVTestCase { } public void testKnnMatchMatMatListOfListOfDMatchInt() { - fail("Not yet implemented"); + final int k = 3; + Mat train = getTrainDescriptors(); + Mat query = getQueryDescriptors(); + List> matches = new ArrayList>(); + matcher.knnMatch(query, train, matches, k); + /* + matcher.add(Arrays.asList(train)); + matcher.knnMatch(query, matches, k); + */ + assertEquals(query.rows(), matches.size()); + for(int i = 0; i ldm = matches.get(i); + assertEquals(Math.min(k, train.rows()), ldm.size()); + for(DMatch dm : ldm) + { + assertEquals(dm.queryIdx, i); + } + } } public void testKnnMatchMatMatListOfListOfDMatchIntMat() { diff --git a/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java b/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java index e503adf..9365569 100644 --- a/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java +++ b/modules/java/android_test/src/org/opencv/test/imgproc/ImgprocTest.java @@ -2102,6 +2102,24 @@ public class ImgprocTest extends OpenCVTestCase { assertMatEqual(truth, dst, EPS); } + //undistortPoints(List src, List dst, Mat cameraMatrix, Mat distCoeffs) + public void testUndistortPointsListOfPointListOfPointMatMat() { + List src = new ArrayList(3); + src.add( new Point(1, 2) ); + src.add( new Point(3, 4) ); + src.add( new Point(-1, -1) ); + List dst = new ArrayList(); + Mat cameraMatrix = Mat.eye(3, 3, CvType.CV_64FC1); + Mat distCoeffs = new Mat(8, 1, CvType.CV_64FC1, new Scalar(0)); + Imgproc.undistortPoints(src, dst, cameraMatrix, distCoeffs); + assertEquals(src.size(), dst.size()); + for(int i=0; i