diff --git a/modules/features2d/misc/java/gen_dict.json b/modules/features2d/misc/java/gen_dict.json index 5ed56c88ee..a313728c15 100644 --- a/modules/features2d/misc/java/gen_dict.json +++ b/modules/features2d/misc/java/gen_dict.json @@ -1,7 +1,4 @@ { - "class_ignore_list" : [ - "SimpleBlobDetector" - ], "const_private_list" : [ "OPPONENTEXTRACTOR", "GRIDDETECTOR", diff --git a/modules/features2d/misc/java/test/SIMPLEBLOBFeatureDetectorTest.java b/modules/features2d/misc/java/test/SIMPLEBLOBFeatureDetectorTest.java index 4485fcdbc8..1d8517bbd4 100644 --- a/modules/features2d/misc/java/test/SIMPLEBLOBFeatureDetectorTest.java +++ b/modules/features2d/misc/java/test/SIMPLEBLOBFeatureDetectorTest.java @@ -1,11 +1,62 @@ package org.opencv.test.features2d; +import java.util.Arrays; + +import org.opencv.core.CvType; +import org.opencv.core.Mat; +import org.opencv.core.MatOfKeyPoint; +import org.opencv.core.Point; +import org.opencv.core.Scalar; +import org.opencv.core.KeyPoint; import org.opencv.test.OpenCVTestCase; +import org.opencv.test.OpenCVTestRunner; +import org.opencv.imgproc.Imgproc; +import org.opencv.features2d.Feature2D; +import org.opencv.features2d.SimpleBlobDetector; public class SIMPLEBLOBFeatureDetectorTest extends OpenCVTestCase { + Feature2D detector; + int matSize; + KeyPoint[] truth; + + private Mat getMaskImg() { + Mat mask = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255)); + Mat right = mask.submat(0, matSize, matSize / 2, matSize); + right.setTo(new Scalar(0)); + return mask; + } + + private Mat getTestImg() { + + int center = matSize / 2; + int offset = 40; + + Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(255)); + Imgproc.circle(img, new Point(center - offset, center), 24, new Scalar(0), -1); + Imgproc.circle(img, new Point(center + offset, center), 20, new Scalar(50), -1); + Imgproc.circle(img, new Point(center, center - offset), 18, new Scalar(100), -1); + Imgproc.circle(img, new Point(center, center + offset), 14, new Scalar(150), -1); + Imgproc.circle(img, new Point(center, center), 10, new Scalar(200), -1); + return img; + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + detector = SimpleBlobDetector.create(); + matSize = 200; + truth = new KeyPoint[] { + new KeyPoint( 140, 100, 41.036568f, -1, 0, 0, -1), + new KeyPoint( 60, 100, 48.538486f, -1, 0, 0, -1), + new KeyPoint(100, 60, 36.769554f, -1, 0, 0, -1), + new KeyPoint(100, 140, 28.635643f, -1, 0, 0, -1), + new KeyPoint(100, 100, 20.880613f, -1, 0, 0, -1) + }; + } + public void testCreate() { - fail("Not yet implemented"); + assertNotNull(detector); } public void testDetectListOfMatListOfListOfKeyPoint() { @@ -17,23 +68,51 @@ public class SIMPLEBLOBFeatureDetectorTest extends OpenCVTestCase { } public void testDetectMatListOfKeyPoint() { - fail("Not yet implemented"); + Mat img = getTestImg(); + MatOfKeyPoint keypoints = new MatOfKeyPoint(); + + detector.detect(img, keypoints); + + assertListKeyPointEquals(Arrays.asList(truth), keypoints.toList(), EPS); } public void testDetectMatListOfKeyPointMat() { - fail("Not yet implemented"); + Mat img = getTestImg(); + Mat mask = getMaskImg(); + MatOfKeyPoint keypoints = new MatOfKeyPoint(); + + detector.detect(img, keypoints, mask); + + assertListKeyPointEquals(Arrays.asList(truth[1]), keypoints.toList(), EPS); } public void testEmpty() { +// assertFalse(detector.empty()); fail("Not yet implemented"); } public void testRead() { - fail("Not yet implemented"); + Mat img = getTestImg(); + + MatOfKeyPoint keypoints1 = new MatOfKeyPoint(); + detector.detect(img, keypoints1); + + String filename = OpenCVTestRunner.getTempFileName("yml"); + writeFile(filename, "%YAML:1.0\nthresholdStep: 10\nminThreshold: 50\nmaxThreshold: 220\nminRepeatability: 2\nfilterByArea: true\nminArea: 800\nmaxArea: 5000\n"); + detector.read(filename); + + MatOfKeyPoint keypoints2 = new MatOfKeyPoint(); + detector.detect(img, keypoints2); + + assertTrue(keypoints2.total() <= keypoints1.total()); } public void testWrite() { - fail("Not yet implemented"); - } + String filename = OpenCVTestRunner.getTempFileName("xml"); + detector.write(filename); + + String truth = "\n\n3\n10.\n50.\n220.\n2\n10.\n1\n0\n1\n25.\n5000.\n0\n8.0000001192092896e-01\n3.4028234663852886e+38\n1\n1.0000000149011612e-01\n3.4028234663852886e+38\n1\n9.4999998807907104e-01\n3.4028234663852886e+38\n\n"; + assertEquals(truth, readFile(filename)); + } }