From eaee63d96b63d17db6f2d5e519119786513e0cdf Mon Sep 17 00:00:00 2001 From: berak Date: Sat, 3 Nov 2018 09:15:27 +0100 Subject: [PATCH] java: add converters, tests for MatOfRotatedRect --- .../src/java/org/opencv/utils/Converters.java | 39 +++++++++++++++++++ .../src/org/opencv/test/OpenCVTestCase.java | 19 +++++++++ .../org/opencv/test/utils/ConvertersTest.java | 29 +++++++++++++- .../src/org/opencv/test/OpenCVTestCase.java | 19 +++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) diff --git a/modules/java/generator/src/java/org/opencv/utils/Converters.java b/modules/java/generator/src/java/org/opencv/utils/Converters.java index c0575a6665..9faf2ecee9 100644 --- a/modules/java/generator/src/java/org/opencv/utils/Converters.java +++ b/modules/java/generator/src/java/org/opencv/utils/Converters.java @@ -13,7 +13,9 @@ import org.opencv.core.MatOfPoint2f; import org.opencv.core.MatOfPoint3f; import org.opencv.core.Point; import org.opencv.core.Point3; +import org.opencv.core.Size; import org.opencv.core.Rect; +import org.opencv.core.RotatedRect; import org.opencv.core.Rect2d; import org.opencv.core.DMatch; import org.opencv.core.KeyPoint; @@ -770,4 +772,41 @@ public class Converters { } mats.clear(); } + + public static Mat vector_RotatedRect_to_Mat(List rs) { + Mat res; + int count = (rs != null) ? rs.size() : 0; + if (count > 0) { + res = new Mat(count, 1, CvType.CV_32FC(5)); + float[] buff = new float[5 * count]; + for (int i = 0; i < count; i++) { + RotatedRect r = rs.get(i); + buff[5 * i] = (float)r.center.x; + buff[5 * i + 1] = (float)r.center.y; + buff[5 * i + 2] = (float)r.size.width; + buff[5 * i + 3] = (float)r.size.height; + buff[5 * i + 4] = (float)r.angle; + } + res.put(0, 0, buff); + } else { + res = new Mat(); + } + return res; + } + + public static void Mat_to_vector_RotatedRect(Mat m, List rs) { + if (rs == null) + throw new java.lang.IllegalArgumentException("rs == null"); + int count = m.rows(); + if (CvType.CV_32FC(5) != m.type() || m.cols() != 1) + throw new java.lang.IllegalArgumentException( + "CvType.CV_32FC5 != m.type() || m.rows()!=1\n" + m); + + rs.clear(); + float[] buff = new float[5 * count]; + m.get(0, 0, buff); + for (int i = 0; i < count; i++) { + rs.add(new RotatedRect(new Point(buff[5 * i], buff[5 * i + 1]), new Size(buff[5 * i + 2], buff[5 * i + 3]), buff[5 * i + 4])); + } + } } diff --git a/modules/java/test/android_test/src/org/opencv/test/OpenCVTestCase.java b/modules/java/test/android_test/src/org/opencv/test/OpenCVTestCase.java index 2cd2b86155..c3af0b343b 100644 --- a/modules/java/test/android_test/src/org/opencv/test/OpenCVTestCase.java +++ b/modules/java/test/android_test/src/org/opencv/test/OpenCVTestCase.java @@ -17,6 +17,7 @@ import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Point3; import org.opencv.core.Rect; +import org.opencv.core.RotatedRect; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.core.DMatch; @@ -336,6 +337,15 @@ public class OpenCVTestCase extends TestCase { assertRectEquals(list1.get(i), list2.get(i)); } + public static void assertListRotatedRectEquals(List list1, List list2) { + if (list1.size() != list2.size()) { + throw new UnsupportedOperationException(); + } + + for (int i = 0; i < list1.size(); i++) + assertRotatedRectEquals(list1.get(i), list2.get(i)); + } + public static void assertRectEquals(Rect expected, Rect actual) { String msg = "expected:<" + expected + "> but was:<" + actual + ">"; assertEquals(msg, expected.x, actual.x); @@ -344,6 +354,15 @@ public class OpenCVTestCase extends TestCase { assertEquals(msg, expected.height, actual.height); } + public static void assertRotatedRectEquals(RotatedRect expected, RotatedRect actual) { + String msg = "expected:<" + expected + "> but was:<" + actual + ">"; + assertEquals(msg, expected.center.x, actual.center.x); + assertEquals(msg, expected.center.y, actual.center.y); + assertEquals(msg, expected.size.width, actual.size.width); + assertEquals(msg, expected.size.height, actual.size.height); + assertEquals(msg, expected.angle, actual.angle); + } + public static void assertMatEqual(Mat m1, Mat m2) { compareMats(m1, m2, true); } diff --git a/modules/java/test/common_test/src/org/opencv/test/utils/ConvertersTest.java b/modules/java/test/common_test/src/org/opencv/test/utils/ConvertersTest.java index 117bbd8083..54d2736c46 100644 --- a/modules/java/test/common_test/src/org/opencv/test/utils/ConvertersTest.java +++ b/modules/java/test/common_test/src/org/opencv/test/utils/ConvertersTest.java @@ -4,7 +4,9 @@ import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Point3; +import org.opencv.core.Size; import org.opencv.core.Rect; +import org.opencv.core.RotatedRect; import org.opencv.core.DMatch; import org.opencv.core.KeyPoint; import org.opencv.test.OpenCVTestCase; @@ -222,6 +224,19 @@ public class ConvertersTest extends OpenCVTestCase { assertListRectEquals(truth, rectangles); } + public void testMat_to_vector_RotatedRect() { + Mat src = new Mat(2, 1, CvType.CV_32FC(5)); + src.put(0, 0, 2, 2, 5, 2, 7, + 0, 6, 4, 1, 3); + List rectangles = new ArrayList(); + + Converters.Mat_to_vector_RotatedRect(src, rectangles); + List truth = new ArrayList(); + truth.add(new RotatedRect(new Point(2, 2), new Size(5, 2), 7)); + truth.add(new RotatedRect(new Point(0, 6), new Size(4, 1), 3)); + assertListRotatedRectEquals(truth, rectangles); + } + public void testMat_to_vector_uchar() { Mat src = new Mat(3, 1, CvType.CV_8UC1); src.put(0, 0, 2, 4, 3); @@ -465,6 +480,19 @@ public class ConvertersTest extends OpenCVTestCase { assertMatEqual(truth, dst); } + public void testVector_RotatedRect_to_Mat() { + List rectangles = new ArrayList(); + rectangles.add(new RotatedRect(new Point(2, 2), new Size(5, 2), 7)); + rectangles.add(new RotatedRect(new Point(0, 0), new Size(6, 4), 3)); + + Mat dst = Converters.vector_RotatedRect_to_Mat(rectangles); + + Mat truth = new Mat(2, 1, CvType.CV_32FC(5)); + truth.put(0, 0, 2, 2, 5, 2, 7, + 0, 0, 6, 4, 3); + assertMatEqual(truth, dst, EPS); + } + public void testVector_uchar_to_Mat() { List bytes = new ArrayList(); byte value1 = 1; @@ -498,5 +526,4 @@ public class ConvertersTest extends OpenCVTestCase { fail("Not yet implemented"); } - } diff --git a/modules/java/test/pure_test/src/org/opencv/test/OpenCVTestCase.java b/modules/java/test/pure_test/src/org/opencv/test/OpenCVTestCase.java index f369bb1783..a66206e223 100644 --- a/modules/java/test/pure_test/src/org/opencv/test/OpenCVTestCase.java +++ b/modules/java/test/pure_test/src/org/opencv/test/OpenCVTestCase.java @@ -20,6 +20,7 @@ import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Point3; import org.opencv.core.Rect; +import org.opencv.core.RotatedRect; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.core.DMatch; @@ -362,6 +363,15 @@ public class OpenCVTestCase extends TestCase { assertRectEquals(list1.get(i), list2.get(i)); } + public static void assertListRotatedRectEquals(List list1, List list2) { + if (list1.size() != list2.size()) { + throw new UnsupportedOperationException(); + } + + for (int i = 0; i < list1.size(); i++) + assertRotatedRectEquals(list1.get(i), list2.get(i)); + } + public static void assertRectEquals(Rect expected, Rect actual) { String msg = "expected:<" + expected + "> but was:<" + actual + ">"; assertEquals(msg, expected.x, actual.x); @@ -370,6 +380,15 @@ public class OpenCVTestCase extends TestCase { assertEquals(msg, expected.height, actual.height); } + public static void assertRotatedRectEquals(RotatedRect expected, RotatedRect actual) { + String msg = "expected:<" + expected + "> but was:<" + actual + ">"; + assertEquals(msg, expected.center.x, actual.center.x); + assertEquals(msg, expected.center.y, actual.center.y); + assertEquals(msg, expected.size.width, actual.size.width); + assertEquals(msg, expected.size.height, actual.size.height); + assertEquals(msg, expected.angle, actual.angle); + } + public static void assertMatEqual(Mat m1, Mat m2) { compareMats(m1, m2, true); }