From e1cd84bb252c5d54e089e06df9e2e3d7c3bb11d5 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Wed, 3 Aug 2011 15:14:55 +0000 Subject: [PATCH] Java API: added and fixed several tests --- .../src/org/opencv/test/OpenCVTestRunner.java | 5 ++ .../org/opencv/test/calib3d/calib3dTest.java | 2 +- .../test/features2d/features2dTest.java | 78 +++++++++++++++++++ .../opencv/test/highgui/VideoCaptureTest.java | 5 -- 4 files changed, 84 insertions(+), 6 deletions(-) diff --git a/modules/java/android_test/src/org/opencv/test/OpenCVTestRunner.java b/modules/java/android_test/src/org/opencv/test/OpenCVTestRunner.java index fe5de7cc15..bae3e45bcd 100644 --- a/modules/java/android_test/src/org/opencv/test/OpenCVTestRunner.java +++ b/modules/java/android_test/src/org/opencv/test/OpenCVTestRunner.java @@ -70,4 +70,9 @@ public class OpenCVTestRunner extends InstrumentationTestRunner { androidTestRunner = super.getAndroidTestRunner(); return androidTestRunner; } + + public static String getOutputFileName(String name) + { + return context.getExternalFilesDir(null).getAbsolutePath() + File.separatorChar + name; + } } diff --git a/modules/java/android_test/src/org/opencv/test/calib3d/calib3dTest.java b/modules/java/android_test/src/org/opencv/test/calib3d/calib3dTest.java index 85654e85b3..23006ec326 100644 --- a/modules/java/android_test/src/org/opencv/test/calib3d/calib3dTest.java +++ b/modules/java/android_test/src/org/opencv/test/calib3d/calib3dTest.java @@ -242,7 +242,7 @@ public class calib3dTest extends OpenCVTestCase { List pts1 = new ArrayList(); List pts2 = new ArrayList(); - int minFundamentalMatPoints = 9; // FIXME: probably should be 8 (see ticket #1262) + int minFundamentalMatPoints = 8; for (int i = 0; i < minFundamentalMatPoints; i++) { double x = Math.random() * 100 - 50; double y = Math.random() * 100 - 50; diff --git a/modules/java/android_test/src/org/opencv/test/features2d/features2dTest.java b/modules/java/android_test/src/org/opencv/test/features2d/features2dTest.java index 33a3cafc48..e9b4d94837 100644 --- a/modules/java/android_test/src/org/opencv/test/features2d/features2dTest.java +++ b/modules/java/android_test/src/org/opencv/test/features2d/features2dTest.java @@ -1,6 +1,84 @@ package org.opencv.test.features2d; +import org.opencv.calib3d.Calib3d; +import org.opencv.core.CvType; +import org.opencv.core.Mat; +import org.opencv.core.Point; +import org.opencv.core.Range; +import org.opencv.features2d.DMatch; +import org.opencv.features2d.DescriptorExtractor; +import org.opencv.features2d.DescriptorMatcher; +import org.opencv.features2d.FeatureDetector; +import org.opencv.features2d.Features2d; +import org.opencv.features2d.KeyPoint; +import org.opencv.highgui.Highgui; import org.opencv.test.OpenCVTestCase; +import org.opencv.test.OpenCVTestRunner; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class features2dTest extends OpenCVTestCase { + + public void testPTOD() + { + String detectorCfg = "%YAML:1.0\nhessianThreshold: 4000.\noctaves: 3\noctaveLayers: 4\nupright: 0\n"; + String extractorCfg = "%YAML:1.0\nnOctaves: 4\nnOctaveLayers: 2\nextended: 0\nupright: 0\n"; + + FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF); + DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.SURF); + DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE); + + String detectorCfgFile = OpenCVTestRunner.getTempFileName("yml"); + writeFile(detectorCfgFile, detectorCfg); + detector.read(detectorCfgFile); + + String extractorCfgFile = OpenCVTestRunner.getTempFileName("yml"); + writeFile(extractorCfgFile, extractorCfg); + extractor.read(extractorCfgFile); + + Mat imgTrain = Highgui.imread(OpenCVTestRunner.LENA_PATH, Highgui.CV_LOAD_IMAGE_GRAYSCALE); + Mat imgQuery = imgTrain.submat(new Range(0, imgTrain.rows()-100), Range.all()); + + List trainKeypoints = new ArrayList(); + List queryKeypoints = new ArrayList(); + + detector.detect(imgTrain, trainKeypoints); + detector.detect(imgQuery, queryKeypoints); + + //OpenCVTestRunner.Log("Keypoints found: " + trainKeypoints.size() + ":" + queryKeypoints.size()); + + Mat trainDescriptors = new Mat(); + Mat queryDescriptors = new Mat(); + + extractor.compute(imgTrain, trainKeypoints, trainDescriptors); + extractor.compute(imgQuery, queryKeypoints, queryDescriptors); + + List matches = new ArrayList(); + + matcher.add(Arrays.asList(trainDescriptors)); + matcher.match(queryDescriptors, matches); + + //OpenCVTestRunner.Log("Matches found: " + matches.size()); + + List points1 = new ArrayList(); + List points2 = new ArrayList(); + + for(int i = 0; i < matches.size(); i++){ + DMatch match = matches.get(i); + points1.add(trainKeypoints.get(match.trainIdx).pt); + points2.add(queryKeypoints.get(match.queryIdx).pt); + } + + Mat hmg = Calib3d.findHomography(points1, points2, Calib3d.RANSAC); + + assertMatEqual(Mat.eye(3, 3, CvType.CV_64F), hmg, EPS); + + Mat outimg = new Mat(); + Features2d.drawMatches(imgQuery, queryKeypoints, imgTrain, trainKeypoints, matches, outimg); + String outputPath = OpenCVTestRunner.getOutputFileName("PTODresult.png"); + Highgui.imwrite(outputPath, outimg); + //OpenCVTestRunner.Log("Output image is saved to: " + outputPath); + } } diff --git a/modules/java/android_test/src/org/opencv/test/highgui/VideoCaptureTest.java b/modules/java/android_test/src/org/opencv/test/highgui/VideoCaptureTest.java index c86ef30bfe..b2ec21e1c3 100644 --- a/modules/java/android_test/src/org/opencv/test/highgui/VideoCaptureTest.java +++ b/modules/java/android_test/src/org/opencv/test/highgui/VideoCaptureTest.java @@ -122,9 +122,4 @@ public class VideoCaptureTest extends OpenCVTestCase { capture.release(); assertTrue(isOpened); } - - public void testVideoCaptureString() { - fail("Not yet implemented"); - } - }