1 package org.opencv.core;
2 
3 import java.util.Arrays;
4 import java.util.List;
5 
6 import org.opencv.core.RotatedRect;
7 
8 
9 
10 public class MatOfRotatedRect extends Mat {
11     // 32FC5
12     private static final int _depth = CvType.CV_32F;
13     private static final int _channels = 5;
14 
MatOfRotatedRect()15     public MatOfRotatedRect() {
16         super();
17     }
18 
MatOfRotatedRect(long addr)19     protected MatOfRotatedRect(long addr) {
20         super(addr);
21         if( !empty() && checkVector(_channels, _depth) < 0 )
22             throw new IllegalArgumentException("Incompatible Mat");
23         //FIXME: do we need release() here?
24     }
25 
fromNativeAddr(long addr)26     public static MatOfRotatedRect fromNativeAddr(long addr) {
27         return new MatOfRotatedRect(addr);
28     }
29 
MatOfRotatedRect(Mat m)30     public MatOfRotatedRect(Mat m) {
31         super(m, Range.all());
32         if( !empty() && checkVector(_channels, _depth) < 0 )
33             throw new IllegalArgumentException("Incompatible Mat");
34         //FIXME: do we need release() here?
35     }
36 
MatOfRotatedRect(RotatedRect...a)37     public MatOfRotatedRect(RotatedRect...a) {
38         super();
39         fromArray(a);
40     }
41 
alloc(int elemNumber)42     public void alloc(int elemNumber) {
43         if(elemNumber>0)
44             super.create(elemNumber, 1, CvType.makeType(_depth, _channels));
45     }
46 
fromArray(RotatedRect...a)47     public void fromArray(RotatedRect...a) {
48         if(a==null || a.length==0)
49             return;
50         int num = a.length;
51         alloc(num);
52         float buff[] = new float[num * _channels];
53         for(int i=0; i<num; i++) {
54             RotatedRect r = a[i];
55             buff[_channels*i+0] = (float) r.center.x;
56             buff[_channels*i+1] = (float) r.center.y;
57             buff[_channels*i+2] = (float) r.size.width;
58             buff[_channels*i+3] = (float) r.size.height;
59             buff[_channels*i+4] = (float) r.angle;
60         }
61         put(0, 0, buff); //TODO: check ret val!
62     }
63 
toArray()64     public RotatedRect[] toArray() {
65         int num = (int) total();
66         RotatedRect[] a = new RotatedRect[num];
67         if(num == 0)
68             return a;
69         float buff[] = new float[_channels];
70         for(int i=0; i<num; i++) {
71             get(i, 0, buff); //TODO: check ret val!
72             a[i] = new RotatedRect(new Point(buff[0],buff[1]),new Size(buff[2],buff[3]),buff[4]);
73         }
74         return a;
75     }
76 
fromList(List<RotatedRect> lr)77     public void fromList(List<RotatedRect> lr) {
78         RotatedRect ap[] = lr.toArray(new RotatedRect[0]);
79         fromArray(ap);
80     }
81 
toList()82     public List<RotatedRect> toList() {
83         RotatedRect[] ar = toArray();
84         return Arrays.asList(ar);
85     }
86 }
87