001package org.opencv.utils;
002
003import java.util.ArrayList;
004import java.util.List;
005
006import org.opencv.core.CvType;
007import org.opencv.core.Mat;
008import org.opencv.core.MatOfByte;
009import org.opencv.core.MatOfDMatch;
010import org.opencv.core.MatOfKeyPoint;
011import org.opencv.core.MatOfPoint;
012import org.opencv.core.MatOfPoint2f;
013import org.opencv.core.MatOfPoint3f;
014import org.opencv.core.Point;
015import org.opencv.core.Point3;
016import org.opencv.core.Rect;
017import org.opencv.core.DMatch;
018import org.opencv.core.KeyPoint;
019
020public class Converters {
021
022    public static Mat vector_Point_to_Mat(List<Point> pts) {
023        return vector_Point_to_Mat(pts, CvType.CV_32S);
024    }
025
026    public static Mat vector_Point2f_to_Mat(List<Point> pts) {
027        return vector_Point_to_Mat(pts, CvType.CV_32F);
028    }
029
030    public static Mat vector_Point2d_to_Mat(List<Point> pts) {
031        return vector_Point_to_Mat(pts, CvType.CV_64F);
032    }
033
034    public static Mat vector_Point_to_Mat(List<Point> pts, int typeDepth) {
035        Mat res;
036        int count = (pts != null) ? pts.size() : 0;
037        if (count > 0) {
038            switch (typeDepth) {
039            case CvType.CV_32S: {
040                res = new Mat(count, 1, CvType.CV_32SC2);
041                int[] buff = new int[count * 2];
042                for (int i = 0; i < count; i++) {
043                    Point p = pts.get(i);
044                    buff[i * 2] = (int) p.x;
045                    buff[i * 2 + 1] = (int) p.y;
046                }
047                res.put(0, 0, buff);
048            }
049                break;
050
051            case CvType.CV_32F: {
052                res = new Mat(count, 1, CvType.CV_32FC2);
053                float[] buff = new float[count * 2];
054                for (int i = 0; i < count; i++) {
055                    Point p = pts.get(i);
056                    buff[i * 2] = (float) p.x;
057                    buff[i * 2 + 1] = (float) p.y;
058                }
059                res.put(0, 0, buff);
060            }
061                break;
062
063            case CvType.CV_64F: {
064                res = new Mat(count, 1, CvType.CV_64FC2);
065                double[] buff = new double[count * 2];
066                for (int i = 0; i < count; i++) {
067                    Point p = pts.get(i);
068                    buff[i * 2] = p.x;
069                    buff[i * 2 + 1] = p.y;
070                }
071                res.put(0, 0, buff);
072            }
073                break;
074
075            default:
076                throw new IllegalArgumentException("'typeDepth' can be CV_32S, CV_32F or CV_64F");
077            }
078        } else {
079            res = new Mat();
080        }
081        return res;
082    }
083
084    public static Mat vector_Point3i_to_Mat(List<Point3> pts) {
085        return vector_Point3_to_Mat(pts, CvType.CV_32S);
086    }
087
088    public static Mat vector_Point3f_to_Mat(List<Point3> pts) {
089        return vector_Point3_to_Mat(pts, CvType.CV_32F);
090    }
091
092    public static Mat vector_Point3d_to_Mat(List<Point3> pts) {
093        return vector_Point3_to_Mat(pts, CvType.CV_64F);
094    }
095
096    public static Mat vector_Point3_to_Mat(List<Point3> pts, int typeDepth) {
097        Mat res;
098        int count = (pts != null) ? pts.size() : 0;
099        if (count > 0) {
100            switch (typeDepth) {
101            case CvType.CV_32S: {
102                res = new Mat(count, 1, CvType.CV_32SC3);
103                int[] buff = new int[count * 3];
104                for (int i = 0; i < count; i++) {
105                    Point3 p = pts.get(i);
106                    buff[i * 3] = (int) p.x;
107                    buff[i * 3 + 1] = (int) p.y;
108                    buff[i * 3 + 2] = (int) p.z;
109                }
110                res.put(0, 0, buff);
111            }
112                break;
113
114            case CvType.CV_32F: {
115                res = new Mat(count, 1, CvType.CV_32FC3);
116                float[] buff = new float[count * 3];
117                for (int i = 0; i < count; i++) {
118                    Point3 p = pts.get(i);
119                    buff[i * 3] = (float) p.x;
120                    buff[i * 3 + 1] = (float) p.y;
121                    buff[i * 3 + 2] = (float) p.z;
122                }
123                res.put(0, 0, buff);
124            }
125                break;
126
127            case CvType.CV_64F: {
128                res = new Mat(count, 1, CvType.CV_64FC3);
129                double[] buff = new double[count * 3];
130                for (int i = 0; i < count; i++) {
131                    Point3 p = pts.get(i);
132                    buff[i * 3] = p.x;
133                    buff[i * 3 + 1] = p.y;
134                    buff[i * 3 + 2] = p.z;
135                }
136                res.put(0, 0, buff);
137            }
138                break;
139
140            default:
141                throw new IllegalArgumentException("'typeDepth' can be CV_32S, CV_32F or CV_64F");
142            }
143        } else {
144            res = new Mat();
145        }
146        return res;
147    }
148
149    public static void Mat_to_vector_Point2f(Mat m, List<Point> pts) {
150        Mat_to_vector_Point(m, pts);
151    }
152
153    public static void Mat_to_vector_Point2d(Mat m, List<Point> pts) {
154        Mat_to_vector_Point(m, pts);
155    }
156
157    public static void Mat_to_vector_Point(Mat m, List<Point> pts) {
158        if (pts == null)
159            throw new java.lang.IllegalArgumentException("Output List can't be null");
160        int count = m.rows();
161        int type = m.type();
162        if (m.cols() != 1)
163            throw new java.lang.IllegalArgumentException("Input Mat should have one column\n" + m);
164
165        pts.clear();
166        if (type == CvType.CV_32SC2) {
167            int[] buff = new int[2 * count];
168            m.get(0, 0, buff);
169            for (int i = 0; i < count; i++) {
170                pts.add(new Point(buff[i * 2], buff[i * 2 + 1]));
171            }
172        } else if (type == CvType.CV_32FC2) {
173            float[] buff = new float[2 * count];
174            m.get(0, 0, buff);
175            for (int i = 0; i < count; i++) {
176                pts.add(new Point(buff[i * 2], buff[i * 2 + 1]));
177            }
178        } else if (type == CvType.CV_64FC2) {
179            double[] buff = new double[2 * count];
180            m.get(0, 0, buff);
181            for (int i = 0; i < count; i++) {
182                pts.add(new Point(buff[i * 2], buff[i * 2 + 1]));
183            }
184        } else {
185            throw new java.lang.IllegalArgumentException(
186                    "Input Mat should be of CV_32SC2, CV_32FC2 or CV_64FC2 type\n" + m);
187        }
188    }
189
190    public static void Mat_to_vector_Point3i(Mat m, List<Point3> pts) {
191        Mat_to_vector_Point3(m, pts);
192    }
193
194    public static void Mat_to_vector_Point3f(Mat m, List<Point3> pts) {
195        Mat_to_vector_Point3(m, pts);
196    }
197
198    public static void Mat_to_vector_Point3d(Mat m, List<Point3> pts) {
199        Mat_to_vector_Point3(m, pts);
200    }
201
202    public static void Mat_to_vector_Point3(Mat m, List<Point3> pts) {
203        if (pts == null)
204            throw new java.lang.IllegalArgumentException("Output List can't be null");
205        int count = m.rows();
206        int type = m.type();
207        if (m.cols() != 1)
208            throw new java.lang.IllegalArgumentException("Input Mat should have one column\n" + m);
209
210        pts.clear();
211        if (type == CvType.CV_32SC3) {
212            int[] buff = new int[3 * count];
213            m.get(0, 0, buff);
214            for (int i = 0; i < count; i++) {
215                pts.add(new Point3(buff[i * 3], buff[i * 3 + 1], buff[i * 3 + 2]));
216            }
217        } else if (type == CvType.CV_32FC3) {
218            float[] buff = new float[3 * count];
219            m.get(0, 0, buff);
220            for (int i = 0; i < count; i++) {
221                pts.add(new Point3(buff[i * 3], buff[i * 3 + 1], buff[i * 3 + 2]));
222            }
223        } else if (type == CvType.CV_64FC3) {
224            double[] buff = new double[3 * count];
225            m.get(0, 0, buff);
226            for (int i = 0; i < count; i++) {
227                pts.add(new Point3(buff[i * 3], buff[i * 3 + 1], buff[i * 3 + 2]));
228            }
229        } else {
230            throw new java.lang.IllegalArgumentException(
231                    "Input Mat should be of CV_32SC3, CV_32FC3 or CV_64FC3 type\n" + m);
232        }
233    }
234
235    public static Mat vector_Mat_to_Mat(List<Mat> mats) {
236        Mat res;
237        int count = (mats != null) ? mats.size() : 0;
238        if (count > 0) {
239            res = new Mat(count, 1, CvType.CV_32SC2);
240            int[] buff = new int[count * 2];
241            for (int i = 0; i < count; i++) {
242                long addr = mats.get(i).nativeObj;
243                buff[i * 2] = (int) (addr >> 32);
244                buff[i * 2 + 1] = (int) (addr & 0xffffffff);
245            }
246            res.put(0, 0, buff);
247        } else {
248            res = new Mat();
249        }
250        return res;
251    }
252
253    public static void Mat_to_vector_Mat(Mat m, List<Mat> mats) {
254        if (mats == null)
255            throw new java.lang.IllegalArgumentException("mats == null");
256        int count = m.rows();
257        if (CvType.CV_32SC2 != m.type() || m.cols() != 1)
258            throw new java.lang.IllegalArgumentException(
259                    "CvType.CV_32SC2 != m.type() ||  m.cols()!=1\n" + m);
260
261        mats.clear();
262        int[] buff = new int[count * 2];
263        m.get(0, 0, buff);
264        for (int i = 0; i < count; i++) {
265            long addr = (((long) buff[i * 2]) << 32) | (((long) buff[i * 2 + 1]) & 0xffffffffL);
266            mats.add(new Mat(addr));
267        }
268    }
269
270    public static Mat vector_float_to_Mat(List<Float> fs) {
271        Mat res;
272        int count = (fs != null) ? fs.size() : 0;
273        if (count > 0) {
274            res = new Mat(count, 1, CvType.CV_32FC1);
275            float[] buff = new float[count];
276            for (int i = 0; i < count; i++) {
277                float f = fs.get(i);
278                buff[i] = f;
279            }
280            res.put(0, 0, buff);
281        } else {
282            res = new Mat();
283        }
284        return res;
285    }
286
287    public static void Mat_to_vector_float(Mat m, List<Float> fs) {
288        if (fs == null)
289            throw new java.lang.IllegalArgumentException("fs == null");
290        int count = m.rows();
291        if (CvType.CV_32FC1 != m.type() || m.cols() != 1)
292            throw new java.lang.IllegalArgumentException(
293                    "CvType.CV_32FC1 != m.type() ||  m.cols()!=1\n" + m);
294
295        fs.clear();
296        float[] buff = new float[count];
297        m.get(0, 0, buff);
298        for (int i = 0; i < count; i++) {
299            fs.add(buff[i]);
300        }
301    }
302
303    public static Mat vector_uchar_to_Mat(List<Byte> bs) {
304        Mat res;
305        int count = (bs != null) ? bs.size() : 0;
306        if (count > 0) {
307            res = new Mat(count, 1, CvType.CV_8UC1);
308            byte[] buff = new byte[count];
309            for (int i = 0; i < count; i++) {
310                byte b = bs.get(i);
311                buff[i] = b;
312            }
313            res.put(0, 0, buff);
314        } else {
315            res = new Mat();
316        }
317        return res;
318    }
319
320    public static void Mat_to_vector_uchar(Mat m, List<Byte> us) {
321        if (us == null)
322            throw new java.lang.IllegalArgumentException("Output List can't be null");
323        int count = m.rows();
324        if (CvType.CV_8UC1 != m.type() || m.cols() != 1)
325            throw new java.lang.IllegalArgumentException(
326                    "CvType.CV_8UC1 != m.type() ||  m.cols()!=1\n" + m);
327
328        us.clear();
329        byte[] buff = new byte[count];
330        m.get(0, 0, buff);
331        for (int i = 0; i < count; i++) {
332            us.add(buff[i]);
333        }
334    }
335
336    public static Mat vector_char_to_Mat(List<Byte> bs) {
337        Mat res;
338        int count = (bs != null) ? bs.size() : 0;
339        if (count > 0) {
340            res = new Mat(count, 1, CvType.CV_8SC1);
341            byte[] buff = new byte[count];
342            for (int i = 0; i < count; i++) {
343                byte b = bs.get(i);
344                buff[i] = b;
345            }
346            res.put(0, 0, buff);
347        } else {
348            res = new Mat();
349        }
350        return res;
351    }
352
353    public static Mat vector_int_to_Mat(List<Integer> is) {
354        Mat res;
355        int count = (is != null) ? is.size() : 0;
356        if (count > 0) {
357            res = new Mat(count, 1, CvType.CV_32SC1);
358            int[] buff = new int[count];
359            for (int i = 0; i < count; i++) {
360                int v = is.get(i);
361                buff[i] = v;
362            }
363            res.put(0, 0, buff);
364        } else {
365            res = new Mat();
366        }
367        return res;
368    }
369
370    public static void Mat_to_vector_int(Mat m, List<Integer> is) {
371        if (is == null)
372            throw new java.lang.IllegalArgumentException("is == null");
373        int count = m.rows();
374        if (CvType.CV_32SC1 != m.type() || m.cols() != 1)
375            throw new java.lang.IllegalArgumentException(
376                    "CvType.CV_32SC1 != m.type() ||  m.cols()!=1\n" + m);
377
378        is.clear();
379        int[] buff = new int[count];
380        m.get(0, 0, buff);
381        for (int i = 0; i < count; i++) {
382            is.add(buff[i]);
383        }
384    }
385
386    public static void Mat_to_vector_char(Mat m, List<Byte> bs) {
387        if (bs == null)
388            throw new java.lang.IllegalArgumentException("Output List can't be null");
389        int count = m.rows();
390        if (CvType.CV_8SC1 != m.type() || m.cols() != 1)
391            throw new java.lang.IllegalArgumentException(
392                    "CvType.CV_8SC1 != m.type() ||  m.cols()!=1\n" + m);
393
394        bs.clear();
395        byte[] buff = new byte[count];
396        m.get(0, 0, buff);
397        for (int i = 0; i < count; i++) {
398            bs.add(buff[i]);
399        }
400    }
401
402    public static Mat vector_Rect_to_Mat(List<Rect> rs) {
403        Mat res;
404        int count = (rs != null) ? rs.size() : 0;
405        if (count > 0) {
406            res = new Mat(count, 1, CvType.CV_32SC4);
407            int[] buff = new int[4 * count];
408            for (int i = 0; i < count; i++) {
409                Rect r = rs.get(i);
410                buff[4 * i] = r.x;
411                buff[4 * i + 1] = r.y;
412                buff[4 * i + 2] = r.width;
413                buff[4 * i + 3] = r.height;
414            }
415            res.put(0, 0, buff);
416        } else {
417            res = new Mat();
418        }
419        return res;
420    }
421
422    public static void Mat_to_vector_Rect(Mat m, List<Rect> rs) {
423        if (rs == null)
424            throw new java.lang.IllegalArgumentException("rs == null");
425        int count = m.rows();
426        if (CvType.CV_32SC4 != m.type() || m.cols() != 1)
427            throw new java.lang.IllegalArgumentException(
428                    "CvType.CV_32SC4 != m.type() ||  m.rows()!=1\n" + m);
429
430        rs.clear();
431        int[] buff = new int[4 * count];
432        m.get(0, 0, buff);
433        for (int i = 0; i < count; i++) {
434            rs.add(new Rect(buff[4 * i], buff[4 * i + 1], buff[4 * i + 2], buff[4 * i + 3]));
435        }
436    }
437
438    public static Mat vector_KeyPoint_to_Mat(List<KeyPoint> kps) {
439        Mat res;
440        int count = (kps != null) ? kps.size() : 0;
441        if (count > 0) {
442            res = new Mat(count, 1, CvType.CV_64FC(7));
443            double[] buff = new double[count * 7];
444            for (int i = 0; i < count; i++) {
445                KeyPoint kp = kps.get(i);
446                buff[7 * i] = kp.pt.x;
447                buff[7 * i + 1] = kp.pt.y;
448                buff[7 * i + 2] = kp.size;
449                buff[7 * i + 3] = kp.angle;
450                buff[7 * i + 4] = kp.response;
451                buff[7 * i + 5] = kp.octave;
452                buff[7 * i + 6] = kp.class_id;
453            }
454            res.put(0, 0, buff);
455        } else {
456            res = new Mat();
457        }
458        return res;
459    }
460
461    public static void Mat_to_vector_KeyPoint(Mat m, List<KeyPoint> kps) {
462        if (kps == null)
463            throw new java.lang.IllegalArgumentException("Output List can't be null");
464        int count = m.rows();
465        if (CvType.CV_64FC(7) != m.type() || m.cols() != 1)
466            throw new java.lang.IllegalArgumentException(
467                    "CvType.CV_64FC(7) != m.type() ||  m.cols()!=1\n" + m);
468
469        kps.clear();
470        double[] buff = new double[7 * count];
471        m.get(0, 0, buff);
472        for (int i = 0; i < count; i++) {
473            kps.add(new KeyPoint((float) buff[7 * i], (float) buff[7 * i + 1], (float) buff[7 * i + 2], (float) buff[7 * i + 3],
474                    (float) buff[7 * i + 4], (int) buff[7 * i + 5], (int) buff[7 * i + 6]));
475        }
476    }
477
478    // vector_vector_Point
479    public static Mat vector_vector_Point_to_Mat(List<MatOfPoint> pts, List<Mat> mats) {
480        Mat res;
481        int lCount = (pts != null) ? pts.size() : 0;
482        if (lCount > 0) {
483            for (MatOfPoint vpt : pts)
484                mats.add(vpt);
485            res = vector_Mat_to_Mat(mats);
486        } else {
487            res = new Mat();
488        }
489        return res;
490    }
491
492    public static void Mat_to_vector_vector_Point(Mat m, List<MatOfPoint> pts) {
493        if (pts == null)
494            throw new java.lang.IllegalArgumentException("Output List can't be null");
495
496        if (m == null)
497            throw new java.lang.IllegalArgumentException("Input Mat can't be null");
498
499        List<Mat> mats = new ArrayList<Mat>(m.rows());
500        Mat_to_vector_Mat(m, mats);
501        for (Mat mi : mats) {
502            MatOfPoint pt = new MatOfPoint(mi);
503            pts.add(pt);
504            mi.release();
505        }
506        mats.clear();
507    }
508
509    // vector_vector_Point2f
510    public static void Mat_to_vector_vector_Point2f(Mat m, List<MatOfPoint2f> pts) {
511        if (pts == null)
512            throw new java.lang.IllegalArgumentException("Output List can't be null");
513
514        if (m == null)
515            throw new java.lang.IllegalArgumentException("Input Mat can't be null");
516
517        List<Mat> mats = new ArrayList<Mat>(m.rows());
518        Mat_to_vector_Mat(m, mats);
519        for (Mat mi : mats) {
520            MatOfPoint2f pt = new MatOfPoint2f(mi);
521            pts.add(pt);
522            mi.release();
523        }
524        mats.clear();
525    }
526
527    // vector_vector_Point2f
528    public static Mat vector_vector_Point2f_to_Mat(List<MatOfPoint2f> pts, List<Mat> mats) {
529        Mat res;
530        int lCount = (pts != null) ? pts.size() : 0;
531        if (lCount > 0) {
532            for (MatOfPoint2f vpt : pts)
533                mats.add(vpt);
534            res = vector_Mat_to_Mat(mats);
535        } else {
536            res = new Mat();
537        }
538        return res;
539    }
540
541    // vector_vector_Point3f
542    public static void Mat_to_vector_vector_Point3f(Mat m, List<MatOfPoint3f> pts) {
543        if (pts == null)
544            throw new java.lang.IllegalArgumentException("Output List can't be null");
545
546        if (m == null)
547            throw new java.lang.IllegalArgumentException("Input Mat can't be null");
548
549        List<Mat> mats = new ArrayList<Mat>(m.rows());
550        Mat_to_vector_Mat(m, mats);
551        for (Mat mi : mats) {
552            MatOfPoint3f pt = new MatOfPoint3f(mi);
553            pts.add(pt);
554            mi.release();
555        }
556        mats.clear();
557    }
558
559    // vector_vector_Point3f
560    public static Mat vector_vector_Point3f_to_Mat(List<MatOfPoint3f> pts, List<Mat> mats) {
561        Mat res;
562        int lCount = (pts != null) ? pts.size() : 0;
563        if (lCount > 0) {
564            for (MatOfPoint3f vpt : pts)
565                mats.add(vpt);
566            res = vector_Mat_to_Mat(mats);
567        } else {
568            res = new Mat();
569        }
570        return res;
571    }
572
573    // vector_vector_KeyPoint
574    public static Mat vector_vector_KeyPoint_to_Mat(List<MatOfKeyPoint> kps, List<Mat> mats) {
575        Mat res;
576        int lCount = (kps != null) ? kps.size() : 0;
577        if (lCount > 0) {
578            for (MatOfKeyPoint vkp : kps)
579                mats.add(vkp);
580            res = vector_Mat_to_Mat(mats);
581        } else {
582            res = new Mat();
583        }
584        return res;
585    }
586
587    public static void Mat_to_vector_vector_KeyPoint(Mat m, List<MatOfKeyPoint> kps) {
588        if (kps == null)
589            throw new java.lang.IllegalArgumentException("Output List can't be null");
590
591        if (m == null)
592            throw new java.lang.IllegalArgumentException("Input Mat can't be null");
593
594        List<Mat> mats = new ArrayList<Mat>(m.rows());
595        Mat_to_vector_Mat(m, mats);
596        for (Mat mi : mats) {
597            MatOfKeyPoint vkp = new MatOfKeyPoint(mi);
598            kps.add(vkp);
599            mi.release();
600        }
601        mats.clear();
602    }
603
604    public static Mat vector_double_to_Mat(List<Double> ds) {
605        Mat res;
606        int count = (ds != null) ? ds.size() : 0;
607        if (count > 0) {
608            res = new Mat(count, 1, CvType.CV_64FC1);
609            double[] buff = new double[count];
610            for (int i = 0; i < count; i++) {
611                double v = ds.get(i);
612                buff[i] = v;
613            }
614            res.put(0, 0, buff);
615        } else {
616            res = new Mat();
617        }
618        return res;
619    }
620
621    public static void Mat_to_vector_double(Mat m, List<Double> ds) {
622        if (ds == null)
623            throw new java.lang.IllegalArgumentException("ds == null");
624        int count = m.rows();
625        if (CvType.CV_64FC1 != m.type() || m.cols() != 1)
626            throw new java.lang.IllegalArgumentException(
627                    "CvType.CV_64FC1 != m.type() ||  m.cols()!=1\n" + m);
628
629        ds.clear();
630        double[] buff = new double[count];
631        m.get(0, 0, buff);
632        for (int i = 0; i < count; i++) {
633            ds.add(buff[i]);
634        }
635    }
636
637    public static Mat vector_DMatch_to_Mat(List<DMatch> matches) {
638        Mat res;
639        int count = (matches != null) ? matches.size() : 0;
640        if (count > 0) {
641            res = new Mat(count, 1, CvType.CV_64FC4);
642            double[] buff = new double[count * 4];
643            for (int i = 0; i < count; i++) {
644                DMatch m = matches.get(i);
645                buff[4 * i] = m.queryIdx;
646                buff[4 * i + 1] = m.trainIdx;
647                buff[4 * i + 2] = m.imgIdx;
648                buff[4 * i + 3] = m.distance;
649            }
650            res.put(0, 0, buff);
651        } else {
652            res = new Mat();
653        }
654        return res;
655    }
656
657    public static void Mat_to_vector_DMatch(Mat m, List<DMatch> matches) {
658        if (matches == null)
659            throw new java.lang.IllegalArgumentException("Output List can't be null");
660        int count = m.rows();
661        if (CvType.CV_64FC4 != m.type() || m.cols() != 1)
662            throw new java.lang.IllegalArgumentException(
663                    "CvType.CV_64FC4 != m.type() ||  m.cols()!=1\n" + m);
664
665        matches.clear();
666        double[] buff = new double[4 * count];
667        m.get(0, 0, buff);
668        for (int i = 0; i < count; i++) {
669            matches.add(new DMatch((int) buff[4 * i], (int) buff[4 * i + 1], (int) buff[4 * i + 2], (float) buff[4 * i + 3]));
670        }
671    }
672
673    // vector_vector_DMatch
674    public static Mat vector_vector_DMatch_to_Mat(List<MatOfDMatch> lvdm, List<Mat> mats) {
675        Mat res;
676        int lCount = (lvdm != null) ? lvdm.size() : 0;
677        if (lCount > 0) {
678            for (MatOfDMatch vdm : lvdm)
679                mats.add(vdm);
680            res = vector_Mat_to_Mat(mats);
681        } else {
682            res = new Mat();
683        }
684        return res;
685    }
686
687    public static void Mat_to_vector_vector_DMatch(Mat m, List<MatOfDMatch> lvdm) {
688        if (lvdm == null)
689            throw new java.lang.IllegalArgumentException("Output List can't be null");
690
691        if (m == null)
692            throw new java.lang.IllegalArgumentException("Input Mat can't be null");
693
694        List<Mat> mats = new ArrayList<Mat>(m.rows());
695        Mat_to_vector_Mat(m, mats);
696        lvdm.clear();
697        for (Mat mi : mats) {
698            MatOfDMatch vdm = new MatOfDMatch(mi);
699            lvdm.add(vdm);
700            mi.release();
701        }
702        mats.clear();
703    }
704
705    // vector_vector_char
706    public static Mat vector_vector_char_to_Mat(List<MatOfByte> lvb, List<Mat> mats) {
707        Mat res;
708        int lCount = (lvb != null) ? lvb.size() : 0;
709        if (lCount > 0) {
710            for (MatOfByte vb : lvb)
711                mats.add(vb);
712            res = vector_Mat_to_Mat(mats);
713        } else {
714            res = new Mat();
715        }
716        return res;
717    }
718
719    public static void Mat_to_vector_vector_char(Mat m, List<List<Byte>> llb) {
720        if (llb == null)
721            throw new java.lang.IllegalArgumentException("Output List can't be null");
722
723        if (m == null)
724            throw new java.lang.IllegalArgumentException("Input Mat can't be null");
725
726        List<Mat> mats = new ArrayList<Mat>(m.rows());
727        Mat_to_vector_Mat(m, mats);
728        for (Mat mi : mats) {
729            List<Byte> lb = new ArrayList<Byte>();
730            Mat_to_vector_char(mi, lb);
731            llb.add(lb);
732            mi.release();
733        }
734        mats.clear();
735    }
736}