Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/core/misc/java/test/MatTest.java
16354 views
1
package org.opencv.test.core;
2
3
import java.util.Arrays;
4
import java.nio.ByteBuffer;
5
6
import org.opencv.core.Core;
7
import org.opencv.core.CvException;
8
import org.opencv.core.CvType;
9
import org.opencv.core.Mat;
10
import org.opencv.core.Point;
11
import org.opencv.core.Range;
12
import org.opencv.core.Rect;
13
import org.opencv.core.Scalar;
14
import org.opencv.core.Size;
15
import org.opencv.test.OpenCVTestCase;
16
17
public class MatTest extends OpenCVTestCase {
18
19
public void testAdjustROI() {
20
Mat roi = gray0.submat(3, 5, 7, 10);
21
Mat originalroi = roi.clone();
22
23
Mat adjusted = roi.adjustROI(2, 2, 2, 2);
24
25
assertMatEqual(adjusted, roi);
26
assertSizeEquals(new Size(5, 6), adjusted.size(), EPS);
27
assertEquals(originalroi.type(), adjusted.type());
28
assertTrue(adjusted.isSubmatrix());
29
assertFalse(adjusted.isContinuous());
30
31
Point offset = new Point();
32
Size size = new Size();
33
adjusted.locateROI(size, offset);
34
assertPointEquals(new Point(5, 1), offset, EPS);
35
assertSizeEquals(gray0.size(), size, EPS);
36
}
37
38
public void testAssignToMat() {
39
gray0.assignTo(dst);
40
41
assertMatEqual(gray0, dst);
42
43
gray255.assignTo(dst);
44
45
assertMatEqual(gray255, dst);
46
}
47
48
public void testAssignToMatInt() {
49
gray255.assignTo(dst, CvType.CV_32F);
50
51
assertMatEqual(gray255_32f, dst, EPS);
52
}
53
54
public void testChannels() {
55
assertEquals(1, gray0.channels());
56
assertEquals(3, rgbLena.channels());
57
assertEquals(4, rgba0.channels());
58
}
59
60
public void testCheckVectorInt() {
61
// ! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel
62
// (1 x N) or (N x 1); negative number otherwise
63
assertEquals(2, new Mat(2, 10, CvType.CV_8U).checkVector(10));
64
assertEquals(2, new Mat(1, 2, CvType.CV_8UC(10)).checkVector(10));
65
assertEquals(2, new Mat(2, 1, CvType.CV_8UC(10)).checkVector(10));
66
assertEquals(10, new Mat(1, 10, CvType.CV_8UC2).checkVector(2));
67
68
assertTrue(0 > new Mat().checkVector(0));
69
assertTrue(0 > new Mat(10, 1, CvType.CV_8U).checkVector(10));
70
assertTrue(0 > new Mat(10, 20, CvType.CV_8U).checkVector(10));
71
}
72
73
public void testCheckVectorIntInt() {
74
assertEquals(2, new Mat(2, 10, CvType.CV_8U).checkVector(10, CvType.CV_8U));
75
assertEquals(2, new Mat(1, 2, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8U));
76
assertEquals(2, new Mat(2, 1, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8U));
77
assertEquals(10, new Mat(1, 10, CvType.CV_8UC2).checkVector(2, CvType.CV_8U));
78
79
assertTrue(0 > new Mat(2, 10, CvType.CV_8U).checkVector(10, CvType.CV_8S));
80
assertTrue(0 > new Mat(1, 2, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8S));
81
assertTrue(0 > new Mat(2, 1, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8S));
82
assertTrue(0 > new Mat(1, 10, CvType.CV_8UC2).checkVector(10, CvType.CV_8S));
83
}
84
85
public void testCheckVectorIntIntBoolean() {
86
Mat mm = new Mat(5, 1, CvType.CV_8UC(10));
87
Mat roi = new Mat(5, 3, CvType.CV_8UC(10)).submat(1, 3, 2, 3);
88
89
assertEquals(5, mm.checkVector(10, CvType.CV_8U, true));
90
assertEquals(5, mm.checkVector(10, CvType.CV_8U, false));
91
assertEquals(2, roi.checkVector(10, CvType.CV_8U, false));
92
assertTrue(0 > roi.checkVector(10, CvType.CV_8U, true));
93
}
94
95
public void testClone() {
96
dst = gray0.clone();
97
assertMatEqual(gray0, dst);
98
assertFalse(gray0.getNativeObjAddr() == dst.getNativeObjAddr());
99
assertFalse(gray0.dataAddr() == dst.dataAddr());
100
}
101
102
public void testCol() {
103
Mat col = gray0.col(0);
104
assertEquals(1, col.cols());
105
assertEquals(gray0.rows(), col.rows());
106
}
107
108
public void testColRangeIntInt() {
109
Mat cols = gray0.colRange(0, gray0.cols() / 2);
110
111
assertEquals(gray0.cols() / 2, cols.cols());
112
assertEquals(gray0.rows(), cols.rows());
113
}
114
115
public void testColRangeRange() {
116
Range range = new Range(0, 5);
117
dst = gray0.colRange(range);
118
119
truth = new Mat(10, 5, CvType.CV_8UC1, new Scalar(0.0));
120
assertMatEqual(truth, dst);
121
}
122
123
public void testCols() {
124
assertEquals(matSize, gray0.cols());
125
}
126
127
public void testConvertToMatInt() {
128
gray255.convertTo(dst, CvType.CV_32F);
129
130
truth = new Mat(matSize, matSize, CvType.CV_32F, new Scalar(255));
131
assertMatEqual(truth, dst, EPS);
132
}
133
134
public void testConvertToMatIntDouble() {
135
gray2.convertTo(dst, CvType.CV_16U, 2.0);
136
137
truth = new Mat(matSize, matSize, CvType.CV_16U, new Scalar(4));
138
assertMatEqual(truth, dst);
139
}
140
141
public void testConvertToMatIntDoubleDouble() {
142
gray0_32f.convertTo(dst, CvType.CV_8U, 2.0, 4.0);
143
144
truth = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(4));
145
assertMatEqual(truth, dst);
146
}
147
148
public void testCopyToMat() {
149
rgbLena.copyTo(dst);
150
assertMatEqual(rgbLena, dst);
151
}
152
153
public void testCopyToMatMat() {
154
Mat src = new Mat(4, 4, CvType.CV_8U, new Scalar(5));
155
Mat mask = makeMask(src.clone());
156
157
src.copyTo(dst, mask);
158
159
truth = new Mat(4, 4, CvType.CV_8U) {
160
{
161
put(0, 0, 0, 0, 5, 5);
162
put(1, 0, 0, 0, 5, 5);
163
put(2, 0, 0, 0, 5, 5);
164
put(3, 0, 0, 0, 5, 5);
165
}
166
};
167
assertMatEqual(truth, dst);
168
169
}
170
171
public void testCreateIntIntInt() {
172
gray255.create(4, 5, CvType.CV_32F);
173
174
assertEquals(4, gray255.rows());
175
assertEquals(5, gray255.cols());
176
assertEquals(CvType.CV_32F, gray255.type());
177
}
178
179
public void testCreateSizeInt() {
180
Size size = new Size(5, 5);
181
dst.create(size, CvType.CV_16U);
182
183
assertEquals(5, dst.rows());
184
assertEquals(5, dst.cols());
185
assertEquals(CvType.CV_16U, dst.type());
186
}
187
188
public void testCross() {
189
Mat answer = new Mat(1, 3, CvType.CV_32F);
190
answer.put(0, 0, 7.0, 1.0, -5.0);
191
192
Mat cross = v1.cross(v2);
193
assertMatEqual(answer, cross, EPS);
194
}
195
196
public void testDataAddr() {
197
assertTrue(0 != gray0.dataAddr());
198
assertEquals(0, new Mat().dataAddr());
199
}
200
201
public void testDepth() {
202
assertEquals(CvType.CV_8U, gray0.depth());
203
assertEquals(CvType.CV_32F, gray0_32f.depth());
204
}
205
206
public void testDiag() {
207
dst = gray0.diag();
208
209
truth = new Mat(10, 1, CvType.CV_8UC1, new Scalar(0));
210
assertMatEqual(truth, dst);
211
}
212
213
public void testDiagInt() {
214
dst = gray255.diag(2);
215
216
truth = new Mat(8, 1, CvType.CV_8UC1, new Scalar(255));
217
assertMatEqual(truth, dst);
218
}
219
220
public void testDiagMat() {
221
Mat diagVector = new Mat(matSize, 1, CvType.CV_32F, new Scalar(1));
222
223
dst = Mat.diag(diagVector);
224
225
assertMatEqual(grayE_32f, dst, EPS);
226
}
227
228
public void testDiagMat_sqrMatrix() {
229
try {
230
dst = Mat.diag(gray255);
231
} catch (CvException e) {
232
// expected
233
}
234
}
235
236
public void testDot() {
237
double s = v1.dot(v2);
238
assertEquals(11.0, s);
239
}
240
241
public void testDump() {
242
assertEquals("[1, 3, 2]", v1.dump());
243
}
244
245
public void testElemSize() {
246
assertEquals(Byte.SIZE / 8 * gray0.channels(), gray0.elemSize());
247
assertEquals(Float.SIZE / 8 * gray0_32f.channels(), gray0_32f.elemSize());
248
assertEquals(Byte.SIZE / 8 * rgbLena.channels(), rgbLena.elemSize());
249
}
250
251
public void testElemSize1() {
252
assertEquals(Byte.SIZE / 8, gray255.elemSize1());
253
assertEquals(Double.SIZE / 8, gray0_64f.elemSize1());
254
assertEquals(Byte.SIZE / 8, rgbLena.elemSize1());
255
}
256
257
public void testEmpty() {
258
assertTrue(dst.empty());
259
assertTrue(!gray0.empty());
260
}
261
262
public void testEyeIntIntInt() {
263
Mat eye = Mat.eye(3, 3, CvType.CV_32FC1);
264
265
assertMatEqual(eye, eye.inv(), EPS);
266
}
267
268
public void testEyeSizeInt() {
269
Size size = new Size(5, 5);
270
271
Mat eye = Mat.eye(size, CvType.CV_32S);
272
273
assertEquals(5, Core.countNonZero(eye));
274
275
}
276
277
public Mat getTestMat(int size, int type) {
278
Mat m = new Mat(size, size, type);
279
final int ch = CvType.channels(type);
280
double buff[] = new double[size*size * ch];
281
for(int i=0; i<size; i++)
282
for(int j=0; j<size; j++)
283
for(int k=0; k<ch; k++) {
284
buff[i*size*ch + j*ch + k] = 100*i + 10*j + k;
285
}
286
m.put(0, 0, buff);
287
return m;
288
}
289
290
public void testGetIntInt_8U() {
291
Mat m = getTestMat(5, CvType.CV_8UC2);
292
293
// whole Mat
294
assertTrue(Arrays.equals(new double[] {0, 1}, m.get(0, 0)));
295
assertTrue(Arrays.equals(new double[] {240, 241}, m.get(2, 4)));
296
assertTrue(Arrays.equals(new double[] {255, 255}, m.get(4, 4)));
297
298
// sub-Mat
299
Mat sm = m.submat(2, 4, 3, 5);
300
assertTrue(Arrays.equals(new double[] {230, 231}, sm.get(0, 0)));
301
assertTrue(Arrays.equals(new double[] {255, 255}, sm.get(1, 1)));
302
}
303
304
public void testGetIntInt_32S() {
305
Mat m = getTestMat(5, CvType.CV_32SC3);
306
307
// whole Mat
308
assertTrue(Arrays.equals(new double[] {0, 1, 2}, m.get(0, 0)));
309
assertTrue(Arrays.equals(new double[] {240, 241, 242}, m.get(2, 4)));
310
assertTrue(Arrays.equals(new double[] {440, 441, 442}, m.get(4, 4)));
311
312
// sub-Mat
313
Mat sm = m.submat(2, 4, 3, 5);
314
assertTrue(Arrays.equals(new double[] {230, 231, 232}, sm.get(0, 0)));
315
assertTrue(Arrays.equals(new double[] {340, 341, 342}, sm.get(1, 1)));
316
}
317
318
public void testGetIntInt_64F() {
319
Mat m = getTestMat(5, CvType.CV_64FC1);
320
321
// whole Mat
322
assertTrue(Arrays.equals(new double[] {0}, m.get(0, 0)));
323
assertTrue(Arrays.equals(new double[] {240}, m.get(2, 4)));
324
assertTrue(Arrays.equals(new double[] {440}, m.get(4, 4)));
325
326
// sub-Mat
327
Mat sm = m.submat(2, 4, 3, 5);
328
assertTrue(Arrays.equals(new double[] {230}, sm.get(0, 0)));
329
assertTrue(Arrays.equals(new double[] {340}, sm.get(1, 1)));
330
}
331
332
public void testGetIntIntByteArray() {
333
Mat m = getTestMat(5, CvType.CV_8UC3);
334
byte[] goodData = new byte[9];
335
byte[] badData = new byte[7];
336
337
// whole Mat
338
int bytesNum = m.get(1, 1, goodData);
339
340
assertEquals(9, bytesNum);
341
assertTrue(Arrays.equals(new byte[] { 110, 111, 112, 120, 121, 122, (byte) 130, (byte) 131, (byte) 132 }, goodData));
342
343
try {
344
m.get(2, 2, badData);
345
fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");
346
} catch (UnsupportedOperationException e) {
347
// expected
348
}
349
350
// sub-Mat
351
Mat sm = m.submat(2, 4, 3, 5);
352
byte buff00[] = new byte[3];
353
bytesNum = sm.get(0, 0, buff00);
354
assertEquals(3, bytesNum);
355
assertTrue(Arrays.equals(new byte[] {(byte) 230, (byte) 231, (byte) 232}, buff00));
356
byte buff11[] = new byte[3];
357
bytesNum = sm.get(1, 1, buff11);
358
assertEquals(3, bytesNum);
359
assertTrue(Arrays.equals(new byte[] {(byte) 255, (byte) 255, (byte) 255}, buff11));
360
}
361
362
public void testGetIntIntDoubleArray() {
363
Mat m = getTestMat(5, CvType.CV_64F);
364
double buff[] = new double[4];
365
366
// whole Mat
367
int bytesNum = m.get(1, 1, buff);
368
369
assertEquals(32, bytesNum);
370
assertTrue(Arrays.equals(new double[] { 110, 120, 130, 140 }, buff));
371
372
// sub-Mat
373
Mat sm = m.submat(2, 4, 3, 5);
374
double buff00[] = new double[2];
375
bytesNum = sm.get(0, 0, buff00);
376
assertEquals(16, bytesNum);
377
assertTrue(Arrays.equals(new double[] {230, 240}, buff00));
378
double buff11[] = new double[] {0, 0};
379
bytesNum = sm.get(1, 1, buff11);
380
assertEquals(8, bytesNum);
381
assertTrue(Arrays.equals(new double[] {340, 0}, buff11));
382
}
383
384
public void testGetIntIntFloatArray() {
385
Mat m = getTestMat(5, CvType.CV_32F);
386
float buff[] = new float[4];
387
388
// whole Mat
389
int bytesNum = m.get(1, 1, buff);
390
391
assertEquals(16, bytesNum);
392
assertTrue(Arrays.equals(new float[] { 110, 120, 130, 140 }, buff));
393
394
// sub-Mat
395
Mat sm = m.submat(2, 4, 3, 5);
396
float buff00[] = new float[2];
397
bytesNum = sm.get(0, 0, buff00);
398
assertEquals(8, bytesNum);
399
assertTrue(Arrays.equals(new float[] {230, 240}, buff00));
400
float buff11[] = new float[] {0, 0};
401
bytesNum = sm.get(1, 1, buff11);
402
assertEquals(4, bytesNum);
403
assertTrue(Arrays.equals(new float[] {340, 0}, buff11));
404
}
405
406
public void testGetIntIntIntArray() {
407
Mat m = getTestMat(5, CvType.CV_32SC2);
408
int[] buff = new int[6];
409
410
// whole Mat
411
int bytesNum = m.get(1, 1, buff);
412
413
assertEquals(24, bytesNum);
414
assertTrue(Arrays.equals(new int[] { 110, 111, 120, 121, 130, 131 }, buff));
415
416
// sub-Mat
417
Mat sm = m.submat(2, 4, 3, 5);
418
int buff00[] = new int[4];
419
bytesNum = sm.get(0, 0, buff00);
420
assertEquals(16, bytesNum);
421
assertTrue(Arrays.equals(new int[] {230, 231, 240, 241}, buff00));
422
int buff11[] = new int[]{0, 0, 0, 0};
423
bytesNum = sm.get(1, 1, buff11);
424
assertEquals(8, bytesNum);
425
assertTrue(Arrays.equals(new int[] {340, 341, 0, 0}, buff11));
426
}
427
428
public void testGetIntIntShortArray() {
429
Mat m = getTestMat(5, CvType.CV_16SC2);
430
short[] buff = new short[6];
431
432
// whole Mat
433
int bytesNum = m.get(1, 1, buff);
434
435
assertEquals(12, bytesNum);
436
assertTrue(Arrays.equals(new short[] { 110, 111, 120, 121, 130, 131 }, buff));
437
438
// sub-Mat
439
Mat sm = m.submat(2, 4, 3, 5);
440
short buff00[] = new short[4];
441
bytesNum = sm.get(0, 0, buff00);
442
assertEquals(8, bytesNum);
443
assertTrue(Arrays.equals(new short[] {230, 231, 240, 241}, buff00));
444
short buff11[] = new short[]{0, 0, 0, 0};
445
bytesNum = sm.get(1, 1, buff11);
446
assertEquals(4, bytesNum);
447
assertTrue(Arrays.equals(new short[] {340, 341, 0, 0}, buff11));
448
}
449
450
public void testGetNativeObjAddr() {
451
assertTrue(0 != gray0.getNativeObjAddr());
452
}
453
454
public void testHeight() {
455
assertEquals(gray0.rows(), gray0.height());
456
assertEquals(rgbLena.rows(), rgbLena.height());
457
assertEquals(rgba128.rows(), rgba128.height());
458
}
459
460
public void testInv() {
461
dst = grayE_32f.inv();
462
assertMatEqual(grayE_32f, dst, EPS);
463
}
464
465
public void testInvInt() {
466
Mat src = new Mat(2, 2, CvType.CV_32F) {
467
{
468
put(0, 0, 1.0);
469
put(0, 1, 2.0);
470
put(1, 0, 1.5);
471
put(1, 1, 4.0);
472
}
473
};
474
475
dst = src.inv(Core.DECOMP_CHOLESKY);
476
477
truth = new Mat(2, 2, CvType.CV_32F) {
478
{
479
put(0, 0, 4.0);
480
put(0, 1, -2.0);
481
put(1, 0, -1.5);
482
put(1, 1, 1.0);
483
}
484
};
485
486
assertMatEqual(truth, dst, EPS);
487
}
488
489
public void testIsContinuous() {
490
assertTrue(gray0.isContinuous());
491
492
Mat subMat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2);
493
assertFalse(subMat.isContinuous());
494
}
495
496
public void testIsSubmatrix() {
497
assertFalse(gray0.isSubmatrix());
498
Mat subMat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2);
499
assertTrue(subMat.isSubmatrix());
500
}
501
502
public void testLocateROI() {
503
Mat roi = gray0.submat(3, 5, 7, 10);
504
Point offset = new Point();
505
Size size = new Size();
506
507
roi.locateROI(size, offset);
508
509
assertPointEquals(new Point(7, 3), offset, EPS);
510
assertSizeEquals(new Size(10, 10), size, EPS);
511
}
512
513
public void testMat() {
514
Mat m = new Mat();
515
assertNotNull(m);
516
assertTrue(m.empty());
517
}
518
519
public void testMatIntIntCvType() {
520
Mat gray = new Mat(1, 1, CvType.CV_8UC1);
521
assertFalse(gray.empty());
522
523
Mat rgb = new Mat(1, 1, CvType.CV_8UC3);
524
assertFalse(rgb.empty());
525
}
526
527
public void testMatIntIntCvTypeScalar() {
528
dst = new Mat(gray127.rows(), gray127.cols(), CvType.CV_8U, new Scalar(127));
529
assertFalse(dst.empty());
530
assertMatEqual(dst, gray127);
531
532
dst = new Mat(rgba128.rows(), rgba128.cols(), CvType.CV_8UC4, Scalar.all(128));
533
assertFalse(dst.empty());
534
assertMatEqual(dst, rgba128);
535
}
536
537
public void testMatIntIntInt() {
538
Mat gray = new Mat(1, 1, CvType.CV_8U);
539
assertFalse(gray.empty());
540
541
Mat rgb = new Mat(1, 1, CvType.CV_8U);
542
assertFalse(rgb.empty());
543
}
544
545
public void testMatIntIntIntScalar() {
546
Mat m1 = new Mat(gray127.rows(), gray127.cols(), CvType.CV_8U, new Scalar(127));
547
assertFalse(m1.empty());
548
assertMatEqual(m1, gray127);
549
550
Mat m2 = new Mat(gray0_32f.rows(), gray0_32f.cols(), CvType.CV_32F, new Scalar(0));
551
assertFalse(m2.empty());
552
assertMatEqual(m2, gray0_32f, EPS);
553
}
554
555
public void testMatMatRange() {
556
dst = new Mat(gray0, new Range(0, 5));
557
558
truth = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
559
assertFalse(dst.empty());
560
assertMatEqual(truth, dst);
561
}
562
563
public void testMatMatRangeRange() {
564
dst = new Mat(gray255_32f, new Range(0, 5), new Range(0, 5));
565
566
truth = new Mat(5, 5, CvType.CV_32FC1, new Scalar(255));
567
568
assertFalse(dst.empty());
569
assertMatEqual(truth, dst, EPS);
570
}
571
572
public void testMatMatRect() {
573
Mat m = new Mat(7, 6, CvType.CV_32SC1);
574
m.put(0, 0,
575
0, 1, 2, 3, 4, 5,
576
10, 11, 12, 13, 14, 15,
577
20, 21, 22, 23, 24, 25,
578
30, 31, 32, 33, 34, 35,
579
40, 41, 42, 43, 44, 45,
580
50, 51, 52, 53, 54, 55,
581
60, 61, 62, 63, 64, 65 );
582
583
dst = new Mat(m, new Rect(1, 2, 3, 4));
584
585
truth = new Mat(4, 3, CvType.CV_32SC1);
586
truth.put(0, 0,
587
21, 22, 23,
588
31, 32, 33,
589
41, 42, 43,
590
51, 52, 53 );
591
592
assertFalse(dst.empty());
593
assertMatEqual(truth, dst);
594
}
595
596
public void testMatSizeInt() {
597
dst = new Mat(new Size(10, 10), CvType.CV_8U);
598
599
assertFalse(dst.empty());
600
}
601
602
public void testMatSizeIntScalar() {
603
dst = new Mat(new Size(10, 10), CvType.CV_32F, new Scalar(255));
604
605
assertFalse(dst.empty());
606
assertMatEqual(gray255_32f, dst, EPS);
607
}
608
609
public void testMulMat() {
610
assertMatEqual(gray0, gray0.mul(gray255));
611
612
Mat m1 = new Mat(2, 2, CvType.CV_32F, new Scalar(2));
613
Mat m2 = new Mat(2, 2, CvType.CV_32F, new Scalar(3));
614
615
dst = m1.mul(m2);
616
617
truth = new Mat(2, 2, CvType.CV_32F, new Scalar(6));
618
assertMatEqual(truth, dst, EPS);
619
620
}
621
622
public void testMulMatDouble() {
623
Mat m1 = new Mat(2, 2, CvType.CV_32F, new Scalar(2));
624
Mat m2 = new Mat(2, 2, CvType.CV_32F, new Scalar(3));
625
626
dst = m1.mul(m2, 3.0);
627
628
truth = new Mat(2, 2, CvType.CV_32F, new Scalar(18));
629
assertMatEqual(truth, dst, EPS);
630
}
631
632
public void testOnesIntIntInt() {
633
dst = Mat.ones(matSize, matSize, CvType.CV_32F);
634
635
truth = new Mat(matSize, matSize, CvType.CV_32F, new Scalar(1));
636
assertMatEqual(truth, dst, EPS);
637
}
638
639
public void testOnesSizeInt() {
640
dst = Mat.ones(new Size(2, 2), CvType.CV_16S);
641
truth = new Mat(2, 2, CvType.CV_16S, new Scalar(1));
642
assertMatEqual(truth, dst);
643
}
644
645
public void testPush_back() {
646
Mat m1 = new Mat(2, 4, CvType.CV_32F, new Scalar(2));
647
Mat m2 = new Mat(3, 4, CvType.CV_32F, new Scalar(3));
648
649
m1.push_back(m2);
650
651
truth = new Mat(5, 4, CvType.CV_32FC1) {
652
{
653
put(0, 0, 2, 2, 2, 2);
654
put(1, 0, 2, 2, 2, 2);
655
put(2, 0, 3, 3, 3, 3);
656
put(3, 0, 3, 3, 3, 3);
657
put(4, 0, 3, 3, 3, 3);
658
}
659
};
660
661
assertMatEqual(truth, m1, EPS);
662
}
663
664
public void testPutIntIntByteArray() {
665
Mat m = new Mat(5, 5, CvType.CV_8UC3, new Scalar(1, 2, 3));
666
Mat sm = m.submat(2, 4, 3, 5);
667
byte[] buff = new byte[] { 0, 0, 0, 0, 0, 0 };
668
byte[] buff0 = new byte[] { 10, 20, 30, 40, 50, 60 };
669
byte[] buff1 = new byte[] { -1, -2, -3, -4, -5, -6 };
670
671
int bytesNum = m.put(1, 2, buff0);
672
673
assertEquals(6, bytesNum);
674
bytesNum = m.get(1, 2, buff);
675
assertEquals(6, bytesNum);
676
assertTrue(Arrays.equals(buff, buff0));
677
678
bytesNum = sm.put(0, 0, buff1);
679
680
assertEquals(6, bytesNum);
681
bytesNum = sm.get(0, 0, buff);
682
assertEquals(6, bytesNum);
683
assertTrue(Arrays.equals(buff, buff1));
684
bytesNum = m.get(2, 3, buff);
685
assertEquals(6, bytesNum);
686
assertTrue(Arrays.equals(buff, buff1));
687
688
Mat m1 = m.row(1);
689
bytesNum = m1.get(0, 2, buff);
690
assertEquals(6, bytesNum);
691
assertTrue(Arrays.equals(buff, buff0));
692
693
try {
694
byte[] bytes2 = new byte[] { 10, 20, 30, 40, 50 };
695
m.put(2, 2, bytes2);
696
fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");
697
} catch (UnsupportedOperationException e) {
698
// expected
699
}
700
}
701
702
public void testPutIntIntDoubleArray() {
703
Mat m = new Mat(5, 5, CvType.CV_8UC3, new Scalar(1, 2, 3));
704
Mat sm = m.submat(2, 4, 3, 5);
705
byte[] buff = new byte[] { 0, 0, 0, 0, 0, 0 };
706
707
int bytesNum = m.put(1, 2, 10, 20, 30, 40, 50, 60);
708
709
assertEquals(6, bytesNum);
710
bytesNum = m.get(1, 2, buff);
711
assertEquals(6, bytesNum);
712
assertTrue(Arrays.equals(buff, new byte[]{10, 20, 30, 40, 50, 60}));
713
714
bytesNum = sm.put(0, 0, 255, 254, 253, 252, 251, 250);
715
716
assertEquals(6, bytesNum);
717
bytesNum = sm.get(0, 0, buff);
718
assertEquals(6, bytesNum);
719
assertTrue(Arrays.equals(buff, new byte[]{-1, -2, -3, -4, -5, -6}));
720
bytesNum = m.get(2, 3, buff);
721
assertEquals(6, bytesNum);
722
assertTrue(Arrays.equals(buff, new byte[]{-1, -2, -3, -4, -5, -6}));
723
}
724
725
public void testPutIntIntFloatArray() {
726
Mat m = new Mat(5, 5, CvType.CV_32FC3, new Scalar(1, 2, 3));
727
float[] elements = new float[] { 10, 20, 30, 40, 50, 60 };
728
729
int bytesNum = m.put(4, 3, elements);
730
731
assertEquals(elements.length * 4, bytesNum);
732
Mat m1 = m.row(4);
733
float buff[] = new float[3];
734
bytesNum = m1.get(0, 4, buff);
735
assertEquals(buff.length * 4, bytesNum);
736
assertTrue(Arrays.equals(new float[]{40, 50, 60}, buff));
737
assertArrayEquals(new double[]{10, 20, 30}, m.get(4, 3), EPS);
738
739
try {
740
float[] elements2 = new float[] { 10, 20, 30, 40, 50 };
741
m.put(2, 2, elements2);
742
fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");
743
} catch (UnsupportedOperationException e) {
744
// expected
745
}
746
}
747
748
public void testPutIntIntIntArray() {
749
Mat m = new Mat(5, 5, CvType.CV_32SC3, new Scalar(-1, -2, -3));
750
int[] elements = new int[] { 10, 20, 30, 40, 50, 60 };
751
752
int bytesNum = m.put(0, 4, elements);
753
754
assertEquals(elements.length * 4, bytesNum);
755
Mat m1 = m.col(4);
756
int buff[] = new int[3];
757
bytesNum = m1.get(0, 0, buff);
758
assertEquals(buff.length * 4, bytesNum);
759
assertTrue(Arrays.equals(new int[]{10, 20, 30}, buff));
760
assertArrayEquals(new double[]{40, 50, 60}, m.get(1, 0), EPS);
761
762
try {
763
int[] elements2 = new int[] { 10, 20, 30, 40, 50 };
764
m.put(2, 2, elements2);
765
fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");
766
} catch (UnsupportedOperationException e) {
767
// expected
768
}
769
}
770
771
public void testPutIntIntShortArray() {
772
Mat m = new Mat(5, 5, CvType.CV_16SC3, new Scalar(-1, -2, -3));
773
short[] elements = new short[] { 10, 20, 30, 40, 50, 60 };
774
775
int bytesNum = m.put(2, 3, elements);
776
777
assertEquals(elements.length * 2, bytesNum);
778
Mat m1 = m.col(3);
779
short buff[] = new short[3];
780
bytesNum = m1.get(2, 0, buff);
781
assertTrue(Arrays.equals(new short[]{10, 20, 30}, buff));
782
assertArrayEquals(new double[]{40, 50, 60}, m.get(2, 4), EPS);
783
784
try {
785
short[] elements2 = new short[] { 10, 20, 30, 40, 50 };
786
m.put(2, 2, elements2);
787
fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");
788
} catch (UnsupportedOperationException e) {
789
// expected
790
}
791
}
792
793
public void testRelease() {
794
assertFalse(gray0.empty());
795
assertTrue(gray0.rows() > 0);
796
797
gray0.release();
798
799
assertTrue(gray0.empty());
800
assertEquals(0, gray0.rows());
801
assertEquals(0, gray0.dataAddr());
802
}
803
804
public void testReshapeInt() {
805
Mat src = new Mat(4, 4, CvType.CV_8U, new Scalar(0));
806
dst = src.reshape(4);
807
808
truth = new Mat(4, 1, CvType.CV_8UC4, new Scalar(0));
809
assertMatEqual(truth, dst);
810
}
811
812
public void testReshapeIntInt() {
813
Mat src = new Mat(5, 7, CvType.CV_8U, new Scalar(0));
814
dst = src.reshape(7, 5);
815
816
truth = new Mat(5, 1, CvType.CV_8UC(7), new Scalar(0));
817
assertMatEqual(truth, dst);
818
}
819
820
public void testRow() {
821
Mat row = gray0.row(0);
822
assertEquals(1, row.rows());
823
assertEquals(gray0.cols(), row.cols());
824
}
825
826
public void testRowRangeIntInt() {
827
Mat rows = gray0.rowRange(0, gray0.rows() / 2);
828
assertEquals(gray0.rows() / 2, rows.rows());
829
assertEquals(gray0.cols(), rows.cols());
830
}
831
832
public void testRowRangeRange() {
833
Mat rows = gray255.rowRange(new Range(0, 5));
834
835
assertEquals(gray255.rows() / 2, rows.rows());
836
assertEquals(gray255.cols(), rows.cols());
837
}
838
839
public void testRows() {
840
assertEquals(matSize, gray0.rows());
841
}
842
843
public void testSetToMat() {
844
Mat vals = new Mat(7, 1, CvType.CV_8U) {
845
{
846
put(0, 0, 1, 2, 3, 4, 5, 6, 7);
847
}
848
};
849
Mat dst = new Mat(1, 1, CvType.CV_8UC(7));
850
851
dst.setTo(vals);
852
853
Mat truth = new Mat(1, 1, CvType.CV_8UC(7)) {
854
{
855
put(0, 0, 1, 2, 3, 4, 5, 6, 7);
856
}
857
};
858
assertMatEqual(truth, dst);
859
}
860
861
public void testSetToMatMat() {
862
Mat vals = new Mat(7, 1, CvType.CV_8U) {
863
{
864
put(0, 0, 1, 2, 3, 4, 5, 6, 7);
865
}
866
};
867
Mat dst = Mat.zeros(2, 1, CvType.CV_8UC(7));
868
Mat mask = new Mat(2, 1, CvType.CV_8U) {
869
{
870
put(0, 0, 0, 1);
871
}
872
};
873
874
dst.setTo(vals, mask);
875
876
Mat truth = new Mat(2, 1, CvType.CV_8UC(7)) {
877
{
878
put(0, 0, 0, 0, 0, 0, 0, 0, 0);
879
put(1, 0, 1, 2, 3, 4, 5, 6, 7);
880
}
881
};
882
assertMatEqual(truth, dst);
883
}
884
885
public void testSetToScalar() {
886
gray0.setTo(new Scalar(127));
887
assertMatEqual(gray127, gray0);
888
}
889
890
public void testSetToScalarMask() {
891
Mat mask = gray0.clone();
892
mask.put(1, 1, 1, 2, 3);
893
gray0.setTo(new Scalar(1), mask);
894
assertEquals(3, Core.countNonZero(gray0));
895
Core.subtract(gray0, mask, gray0);
896
assertEquals(0, Core.countNonZero(gray0));
897
}
898
899
public void testSize() {
900
assertEquals(new Size(matSize, matSize), gray0.size());
901
902
assertEquals(new Size(3, 1), v1.size());
903
}
904
905
public void testStep1() {
906
assertEquals(matSize * CvType.channels(CvType.CV_8U), gray0.step1());
907
908
assertEquals(3, v2.step1());
909
}
910
911
public void testStep1Int() {
912
Mat roi = rgba0.submat(3, 5, 7, 10);
913
Mat m = roi.clone();
914
915
assertTrue(rgba0.channels() * rgba0.cols() <= roi.step1(0));
916
assertEquals(rgba0.channels(), roi.step1(1));
917
assertTrue(m.channels() * (10 - 7) <= m.step1(0));
918
assertEquals(m.channels(), m.step1(1));
919
}
920
921
public void testSubmatIntIntIntInt() {
922
Mat submat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2);
923
924
assertTrue(submat.isSubmatrix());
925
assertFalse(submat.isContinuous());
926
assertEquals(gray0.rows() / 2, submat.rows());
927
assertEquals(gray0.cols() / 2, submat.cols());
928
}
929
930
public void testSubmatRangeRange() {
931
Mat submat = gray255.submat(new Range(2, 4), new Range(2, 4));
932
assertTrue(submat.isSubmatrix());
933
assertFalse(submat.isContinuous());
934
935
assertEquals(2, submat.rows());
936
assertEquals(2, submat.cols());
937
}
938
939
public void testSubmatRect() {
940
Mat submat = gray255.submat(new Rect(5, 5, gray255.cols() / 2, gray255.rows() / 2));
941
assertTrue(submat.isSubmatrix());
942
assertFalse(submat.isContinuous());
943
944
assertEquals(gray255.rows() / 2, submat.rows());
945
assertEquals(gray255.cols() / 2, submat.cols());
946
}
947
948
public void testT() {
949
assertMatEqual(gray255, gray255.t());
950
951
Mat src = new Mat(3, 3, CvType.CV_16U) {
952
{
953
put(0, 0, 1, 2, 4);
954
put(1, 0, 7, 5, 0);
955
put(2, 0, 3, 4, 6);
956
}
957
};
958
959
dst = src.t();
960
961
truth = new Mat(3, 3, CvType.CV_16U) {
962
{
963
put(0, 0, 1, 7, 3);
964
put(1, 0, 2, 5, 4);
965
put(2, 0, 4, 0, 6);
966
}
967
};
968
assertMatEqual(truth, dst);
969
}
970
971
public void testToString() {
972
assertTrue(null != gray0.toString());
973
}
974
975
public void testTotal() {
976
int nElements = gray0.rows() * gray0.cols();
977
assertEquals(nElements, gray0.total());
978
}
979
980
public void testType() {
981
assertEquals(CvType.CV_8UC1, gray0.type());
982
assertEquals(CvType.CV_32FC1, gray0_32f.type());
983
assertEquals(CvType.CV_8UC3, rgbLena.type());
984
}
985
986
public void testWidth() {
987
assertEquals(gray0.cols(), gray0.width());
988
assertEquals(rgbLena.cols(), rgbLena.width());
989
assertEquals(rgba128.cols(), rgba128.width());
990
}
991
992
public void testZerosIntIntInt() {
993
dst = Mat.zeros(matSize, matSize, CvType.CV_32F);
994
995
assertMatEqual(gray0_32f, dst, EPS);
996
}
997
998
public void testZerosSizeInt() {
999
dst = Mat.zeros(new Size(2, 2), CvType.CV_16S);
1000
1001
truth = new Mat(2, 2, CvType.CV_16S, new Scalar(0));
1002
assertMatEqual(truth, dst);
1003
}
1004
1005
public void testMatFromByteBuffer() {
1006
ByteBuffer bbuf = ByteBuffer.allocateDirect(64*64);
1007
bbuf.putInt(0x01010101);
1008
Mat m = new Mat(64,64,CvType.CV_8UC1,bbuf);
1009
assertEquals(4, Core.countNonZero(m));
1010
Core.add(m, new Scalar(1), m);
1011
assertEquals(4096, Core.countNonZero(m));
1012
m.release();
1013
assertEquals(2, bbuf.get(0));
1014
assertEquals(1, bbuf.get(4095));
1015
}
1016
1017
}
1018
1019