From bd7bf39b4b28cd7ca364c8de935ce442ef423e9e Mon Sep 17 00:00:00 2001
From: berak <px1704@web.de>
Date: Fri, 24 Aug 2018 13:46:38 +0200
Subject: [PATCH] java: change MatOfRotatedRect to CV_32FC5

---
 .../java/src/java/core+MatOfRotatedRect.java  | 20 +++++++++----------
 .../core/misc/java/test/RotatedRectTest.java  | 14 ++++++-------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/modules/core/misc/java/src/java/core+MatOfRotatedRect.java b/modules/core/misc/java/src/java/core+MatOfRotatedRect.java
index dc8ba1470e..6f36e6ca6c 100644
--- a/modules/core/misc/java/src/java/core+MatOfRotatedRect.java
+++ b/modules/core/misc/java/src/java/core+MatOfRotatedRect.java
@@ -8,8 +8,8 @@ import org.opencv.core.RotatedRect;
 
 
 public class MatOfRotatedRect extends Mat {
-    // 64FC5
-    private static final int _depth = CvType.CV_64F;
+    // 32FC5
+    private static final int _depth = CvType.CV_32F;
     private static final int _channels = 5;
 
     public MatOfRotatedRect() {
@@ -49,14 +49,14 @@ public class MatOfRotatedRect extends Mat {
             return;
         int num = a.length;
         alloc(num);
-        double buff[] = new double[num * _channels];
+        float buff[] = new float[num * _channels];
         for(int i=0; i<num; i++) {
             RotatedRect r = a[i];
-            buff[_channels*i+0] = (double) r.center.x;
-            buff[_channels*i+1] = (double) r.center.y;
-            buff[_channels*i+2] = (double) r.size.width;
-            buff[_channels*i+3] = (double) r.size.height;
-            buff[_channels*i+4] = (double) r.angle;
+            buff[_channels*i+0] = (float) r.center.x;
+            buff[_channels*i+1] = (float) r.center.y;
+            buff[_channels*i+2] = (float) r.size.width;
+            buff[_channels*i+3] = (float) r.size.height;
+            buff[_channels*i+4] = (float) r.angle;
         }
         put(0, 0, buff); //TODO: check ret val!
     }
@@ -66,10 +66,10 @@ public class MatOfRotatedRect extends Mat {
         RotatedRect[] a = new RotatedRect[num];
         if(num == 0)
             return a;
-        double buff[] = new double[_channels];
+        float buff[] = new float[_channels];
         for(int i=0; i<num; i++) {
             get(i, 0, buff); //TODO: check ret val!
-            a[i] = new RotatedRect(buff);
+            a[i] = new RotatedRect(new Point(buff[0],buff[1]),new Size(buff[2],buff[3]),buff[4]);
         }
         return a;
     }
diff --git a/modules/core/misc/java/test/RotatedRectTest.java b/modules/core/misc/java/test/RotatedRectTest.java
index 330caf481d..b1b4a677d3 100644
--- a/modules/core/misc/java/test/RotatedRectTest.java
+++ b/modules/core/misc/java/test/RotatedRectTest.java
@@ -199,15 +199,15 @@ public class RotatedRectTest extends OpenCVTestCase {
         MatOfRotatedRect m = new MatOfRotatedRect(a,b,a,b,a,b,a,b);
         assertEquals(m.rows(), 8);
         assertEquals(m.cols(), 1);
-        assertEquals(m.type(), CvType.CV_64FC(5));
+        assertEquals(m.type(), CvType.CV_32FC(5));
         RotatedRect[] arr = m.toArray();
-        assertTrue(arr[2].angle == 5.678);
-        assertTrue(arr[3].center.x == 9);
-        assertTrue(arr[3].size.width == 7);
+        assertEquals(arr[2].angle, a.angle, EPS);
+        assertEquals(arr[3].center.x, b.center.x);
+        assertEquals(arr[3].size.width, b.size.width);
         List<RotatedRect> li = m.toList();
-        assertTrue(li.size() == 8);
+        assertEquals(li.size(), 8);
         RotatedRect rr = li.get(7);
-        assertTrue(rr.angle == 5.432);
-        assertTrue(rr.center.y == 8);
+        assertEquals(rr.angle, b.angle, EPS);
+        assertEquals(rr.center.y, b.center.y);
     }
 }