1 package org.opencv.test.imgproc; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.List; 6 7 import org.opencv.core.Core; 8 import org.opencv.core.CvType; 9 import org.opencv.core.Mat; 10 import org.opencv.core.MatOfFloat; 11 import org.opencv.core.MatOfInt; 12 import org.opencv.core.MatOfInt4; 13 import org.opencv.core.MatOfPoint; 14 import org.opencv.core.MatOfPoint2f; 15 import org.opencv.core.Point; 16 import org.opencv.core.Rect; 17 import org.opencv.core.RotatedRect; 18 import org.opencv.core.Scalar; 19 import org.opencv.core.Size; 20 import org.opencv.core.TermCriteria; 21 import org.opencv.imgproc.Imgproc; 22 import org.opencv.test.OpenCVTestCase; 23 24 public class ImgprocTest extends OpenCVTestCase { 25 26 Point anchorPoint; 27 private int imgprocSz; 28 Size size; 29 30 @Override 31 protected void setUp() throws Exception { 32 super.setUp(); 33 34 imgprocSz = 2; 35 anchorPoint = new Point(2, 2); 36 size = new Size(3, 3); 37 } 38 39 public void testAccumulateMatMat() { 40 Mat src = getMat(CvType.CV_64F, 2); 41 Mat dst = getMat(CvType.CV_64F, 0); 42 Mat dst2 = src.clone(); 43 44 Imgproc.accumulate(src, dst); 45 Imgproc.accumulate(src, dst2); 46 47 assertMatEqual(src, dst, EPS); 48 assertMatEqual(getMat(CvType.CV_64F, 4), dst2, EPS); 49 } 50 51 public void testAccumulateMatMatMat() { 52 Mat src = getMat(CvType.CV_64F, 2); 53 Mat mask = makeMask(getMat(CvType.CV_8U, 1)); 54 Mat dst = getMat(CvType.CV_64F, 0); 55 Mat dst2 = src.clone(); 56 57 Imgproc.accumulate(src, dst, mask); 58 Imgproc.accumulate(src, dst2, mask); 59 60 assertMatEqual(makeMask(getMat(CvType.CV_64F, 2)), dst, EPS); 61 assertMatEqual(makeMask(getMat(CvType.CV_64F, 4), 2), dst2, EPS); 62 } 63 64 public void testAccumulateProductMatMatMat() { 65 Mat src = getMat(CvType.CV_64F, 2); 66 Mat dst = getMat(CvType.CV_64F, 0); 67 Mat dst2 = src.clone(); 68 69 Imgproc.accumulateProduct(src, src, dst); 70 Imgproc.accumulateProduct(src, dst, dst2); 71 72 assertMatEqual(getMat(CvType.CV_64F, 4), dst, EPS); 73 assertMatEqual(getMat(CvType.CV_64F, 10), dst2, EPS); 74 } 75 76 public void testAccumulateProductMatMatMatMat() { 77 Mat src = getMat(CvType.CV_64F, 2); 78 Mat mask = makeMask(getMat(CvType.CV_8U, 1)); 79 Mat dst = getMat(CvType.CV_64F, 0); 80 Mat dst2 = src.clone(); 81 82 Imgproc.accumulateProduct(src, src, dst, mask); 83 Imgproc.accumulateProduct(src, dst, dst2, mask); 84 85 assertMatEqual(makeMask(getMat(CvType.CV_64F, 4)), dst, EPS); 86 assertMatEqual(makeMask(getMat(CvType.CV_64F, 10), 2), dst2, EPS); 87 } 88 89 public void testAccumulateSquareMatMat() { 90 Mat src = getMat(CvType.CV_64F, 2); 91 Mat dst = getMat(CvType.CV_64F, 0); 92 Mat dst2 = src.clone(); 93 94 Imgproc.accumulateSquare(src, dst); 95 Imgproc.accumulateSquare(src, dst2); 96 97 assertMatEqual(getMat(CvType.CV_64F, 4), dst, EPS); 98 assertMatEqual(getMat(CvType.CV_64F, 6), dst2, EPS); 99 } 100 101 public void testAccumulateSquareMatMatMat() { 102 Mat src = getMat(CvType.CV_64F, 2); 103 Mat mask = makeMask(getMat(CvType.CV_8U, 1)); 104 Mat dst = getMat(CvType.CV_64F, 0); 105 Mat dst2 = src.clone(); 106 107 Imgproc.accumulateSquare(src, dst, mask); 108 Imgproc.accumulateSquare(src, dst2, mask); 109 110 assertMatEqual(makeMask(getMat(CvType.CV_64F, 4)), dst, EPS); 111 assertMatEqual(makeMask(getMat(CvType.CV_64F, 6), 2), dst2, EPS); 112 } 113 114 public void testAccumulateWeightedMatMatDouble() { 115 Mat src = getMat(CvType.CV_64F, 2); 116 Mat dst = getMat(CvType.CV_64F, 4); 117 Mat dst2 = src.clone(); 118 119 Imgproc.accumulateWeighted(src, dst, 0.5); 120 Imgproc.accumulateWeighted(src, dst2, 2); 121 122 assertMatEqual(getMat(CvType.CV_64F, 3), dst, EPS); 123 assertMatEqual(getMat(CvType.CV_64F, 2), dst2, EPS); 124 } 125 126 public void testAccumulateWeightedMatMatDoubleMat() { 127 Mat src = getMat(CvType.CV_64F, 2); 128 Mat mask = makeMask(getMat(CvType.CV_8U, 1)); 129 Mat dst = getMat(CvType.CV_64F, 4); 130 Mat dst2 = src.clone(); 131 132 Imgproc.accumulateWeighted(src, dst, 0.5, mask); 133 Imgproc.accumulateWeighted(src, dst2, 2, mask); 134 135 assertMatEqual(makeMask(getMat(CvType.CV_64F, 3), 4), dst, EPS); 136 assertMatEqual(getMat(CvType.CV_64F, 2), dst2, EPS); 137 } 138 139 public void testAdaptiveThreshold() { 140 Mat src = makeMask(getMat(CvType.CV_8U, 50), 20); 141 Mat dst = new Mat(); 142 143 Imgproc.adaptiveThreshold(src, dst, 1, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 3, 0); 144 145 assertEquals(src.rows(), Core.countNonZero(dst)); 146 } 147 148 public void testApproxPolyDP() { 149 MatOfPoint2f curve = new MatOfPoint2f(new Point(1, 3), new Point(2, 4), new Point(3, 5), new Point(4, 4), new Point(5, 3)); 150 151 MatOfPoint2f approxCurve = new MatOfPoint2f(); 152 153 Imgproc.approxPolyDP(curve, approxCurve, EPS, true); 154 155 List<Point> approxCurveGold = new ArrayList<Point>(3); 156 approxCurveGold.add(new Point(1, 3)); 157 approxCurveGold.add(new Point(3, 5)); 158 approxCurveGold.add(new Point(5, 3)); 159 160 assertListPointEquals(approxCurve.toList(), approxCurveGold, EPS); 161 } 162 163 public void testArcLength() { 164 MatOfPoint2f curve = new MatOfPoint2f(new Point(1, 3), new Point(2, 4), new Point(3, 5), new Point(4, 4), new Point(5, 3)); 165 166 double arcLength = Imgproc.arcLength(curve, false); 167 168 assertEquals(5.656854249, arcLength, 0.000001); 169 } 170 171 public void testBilateralFilterMatMatIntDoubleDouble() { 172 Imgproc.bilateralFilter(gray255, dst, 5, 10, 5); 173 174 assertMatEqual(gray255, dst); 175 // TODO_: write better test 176 } 177 178 public void testBilateralFilterMatMatIntDoubleDoubleInt() { 179 Imgproc.bilateralFilter(gray255, dst, 5, 10, 5, Core.BORDER_REFLECT); 180 181 assertMatEqual(gray255, dst); 182 // TODO_: write better test 183 } 184 185 public void testBlurMatMatSize() { 186 Imgproc.blur(gray0, dst, size); 187 assertMatEqual(gray0, dst); 188 189 Imgproc.blur(gray255, dst, size); 190 assertMatEqual(gray255, dst); 191 // TODO_: write better test 192 } 193 194 public void testBlurMatMatSizePoint() { 195 Imgproc.blur(gray0, dst, size, anchorPoint); 196 assertMatEqual(gray0, dst); 197 // TODO_: write better test 198 } 199 200 public void testBlurMatMatSizePointInt() { 201 Imgproc.blur(gray0, dst, size, anchorPoint, Core.BORDER_REFLECT); 202 assertMatEqual(gray0, dst); 203 // TODO_: write better test 204 } 205 206 public void testBoundingRect() { 207 MatOfPoint points = new MatOfPoint(new Point(0, 0), new Point(0, 4), new Point(4, 0), new Point(4, 4)); 208 Point p1 = new Point(1, 1); 209 Point p2 = new Point(-5, -2); 210 211 Rect bbox = Imgproc.boundingRect(points); 212 213 assertTrue(bbox.contains(p1)); 214 assertFalse(bbox.contains(p2)); 215 } 216 217 public void testBoxFilterMatMatIntSize() { 218 Size size = new Size(3, 3); 219 Imgproc.boxFilter(gray0, dst, 8, size); 220 assertMatEqual(gray0, dst); 221 // TODO_: write better test 222 } 223 224 public void testBoxFilterMatMatIntSizePointBoolean() { 225 Imgproc.boxFilter(gray255, dst, 8, size, anchorPoint, false); 226 assertMatEqual(gray255, dst); 227 // TODO_: write better test 228 } 229 230 public void testBoxFilterMatMatIntSizePointBooleanInt() { 231 Imgproc.boxFilter(gray255, dst, 8, size, anchorPoint, false, Core.BORDER_REFLECT); 232 assertMatEqual(gray255, dst); 233 // TODO_: write better test 234 } 235 236 public void testCalcBackProject() { 237 List<Mat> images = Arrays.asList(grayChess); 238 MatOfInt channels = new MatOfInt(0); 239 MatOfInt histSize = new MatOfInt(10); 240 MatOfFloat ranges = new MatOfFloat(0f, 256f); 241 242 Mat hist = new Mat(); 243 Imgproc.calcHist(images, channels, new Mat(), hist, histSize, ranges); 244 Core.normalize(hist, hist); 245 246 Imgproc.calcBackProject(images, channels, hist, dst, ranges, 255); 247 248 assertEquals(grayChess.size(), dst.size()); 249 assertEquals(grayChess.depth(), dst.depth()); 250 assertFalse(0 == Core.countNonZero(dst)); 251 } 252 253 public void testCalcHistListOfMatListOfIntegerMatMatListOfIntegerListOfFloat() { 254 List<Mat> images = Arrays.asList(gray128); 255 MatOfInt channels = new MatOfInt(0); 256 MatOfInt histSize = new MatOfInt(10); 257 MatOfFloat ranges = new MatOfFloat(0f, 256f); 258 Mat hist = new Mat(); 259 260 Imgproc.calcHist(images, channels, new Mat(), hist, histSize, ranges); 261 262 truth = new Mat(10, 1, CvType.CV_32F, Scalar.all(0)) { 263 { 264 put(5, 0, 100); 265 } 266 }; 267 assertMatEqual(truth, hist, EPS); 268 } 269 270 public void testCalcHistListOfMatListOfIntegerMatMatListOfIntegerListOfFloat2D() { 271 List<Mat> images = Arrays.asList(gray255, gray128); 272 MatOfInt channels = new MatOfInt(0, 1); 273 MatOfInt histSize = new MatOfInt(10, 10); 274 MatOfFloat ranges = new MatOfFloat(0f, 256f, 0f, 256f); 275 Mat hist = new Mat(); 276 277 Imgproc.calcHist(images, channels, new Mat(), hist, histSize, ranges); 278 279 truth = new Mat(10, 10, CvType.CV_32F, Scalar.all(0)) { 280 { 281 put(9, 5, 100); 282 } 283 }; 284 assertMatEqual(truth, hist, EPS); 285 } 286 287 public void testCalcHistListOfMatListOfIntegerMatMatListOfIntegerListOfFloat3D() { 288 List<Mat> images = Arrays.asList(rgbLena); 289 290 Mat hist3D = new Mat(); 291 List<Mat> histList = Arrays.asList( new Mat[] {new Mat(), new Mat(), new Mat()} ); 292 293 MatOfInt histSize = new MatOfInt(10); 294 MatOfFloat ranges = new MatOfFloat(0f, 256f); 295 296 for(int i=0; i<rgbLena.channels(); i++) 297 { 298 Imgproc.calcHist(images, new MatOfInt(i), new Mat(), histList.get(i), histSize, ranges); 299 300 assertEquals(10, histList.get(i).checkVector(1)); 301 } 302 303 Core.merge(histList, hist3D); 304 305 assertEquals(CvType.CV_32FC3, hist3D.type()); 306 assertEquals(10, hist3D.checkVector(3)); 307 308 Mat truth = new Mat(10, 1, CvType.CV_32FC3); 309 truth.put(0, 0, 310 0, 24870, 0, 311 1863, 31926, 1, 312 56682, 37677, 2260, 313 77278, 44751, 32436, 314 69397, 41343, 18526, 315 27180, 40407, 18658, 316 21101, 15993, 32042, 317 8343, 18585, 47786, 318 300, 6567, 80988, 319 0, 25, 29447 320 ); 321 322 assertMatEqual(truth, hist3D, EPS); 323 } 324 325 public void testCalcHistListOfMatListOfIntegerMatMatListOfIntegerListOfFloatBoolean() { 326 List<Mat> images = Arrays.asList(gray255, gray128); 327 MatOfInt channels = new MatOfInt(0, 1); 328 MatOfInt histSize = new MatOfInt(10, 10); 329 MatOfFloat ranges = new MatOfFloat(0f, 256f, 0f, 256f); 330 Mat hist = new Mat(); 331 332 Imgproc.calcHist(images, channels, new Mat(), hist, histSize, ranges, true); 333 334 truth = new Mat(10, 10, CvType.CV_32F, Scalar.all(0)) { 335 { 336 put(9, 5, 100); 337 } 338 }; 339 assertMatEqual(truth, hist, EPS); 340 } 341 342 public void testCannyMatMatDoubleDouble() { 343 Imgproc.Canny(gray255, dst, 5, 10); 344 assertMatEqual(gray0, dst); 345 // TODO_: write better test 346 } 347 348 public void testCannyMatMatDoubleDoubleIntBoolean() { 349 Imgproc.Canny(gray0, dst, 5, 10, 5, true); 350 assertMatEqual(gray0, dst); 351 // TODO_: write better test 352 } 353 354 public void testCompareHist() { 355 Mat H1 = new Mat(3, 1, CvType.CV_32F); 356 Mat H2 = new Mat(3, 1, CvType.CV_32F); 357 H1.put(0, 0, 1, 2, 3); 358 H2.put(0, 0, 4, 5, 6); 359 360 double distance = Imgproc.compareHist(H1, H2, Imgproc.CV_COMP_CORREL); 361 362 assertEquals(1., distance); 363 } 364 365 public void testContourAreaMat() { 366 Mat contour = new Mat(1, 4, CvType.CV_32FC2); 367 contour.put(0, 0, 0, 0, 10, 0, 10, 10, 5, 4); 368 369 double area = Imgproc.contourArea(contour); 370 371 assertEquals(45., area); 372 } 373 374 public void testContourAreaMatBoolean() { 375 Mat contour = new Mat(1, 4, CvType.CV_32FC2); 376 contour.put(0, 0, 0, 0, 10, 0, 10, 10, 5, 4); 377 378 double area = Imgproc.contourArea(contour, true); 379 380 assertEquals(45., area); 381 // TODO_: write better test 382 } 383 384 public void testConvertMapsMatMatMatMatInt() { 385 Mat map1 = new Mat(1, 4, CvType.CV_32FC1, new Scalar(1)); 386 Mat map2 = new Mat(1, 4, CvType.CV_32FC1, new Scalar(2)); 387 Mat dstmap1 = new Mat(1, 4, CvType.CV_16SC2); 388 Mat dstmap2 = new Mat(1, 4, CvType.CV_16UC1); 389 390 Imgproc.convertMaps(map1, map2, dstmap1, dstmap2, CvType.CV_16SC2); 391 392 Mat truthMap1 = new Mat(1, 4, CvType.CV_16SC2); 393 truthMap1.put(0, 0, 1, 2, 1, 2, 1, 2, 1, 2); 394 assertMatEqual(truthMap1, dstmap1); 395 Mat truthMap2 = new Mat(1, 4, CvType.CV_16UC1, new Scalar(0)); 396 assertMatEqual(truthMap2, dstmap2); 397 } 398 399 public void testConvertMapsMatMatMatMatIntBoolean() { 400 Mat map1 = new Mat(1, 3, CvType.CV_32FC1, new Scalar(2)); 401 Mat map2 = new Mat(1, 3, CvType.CV_32FC1, new Scalar(4)); 402 Mat dstmap1 = new Mat(1, 3, CvType.CV_16SC2); 403 Mat dstmap2 = new Mat(1, 3, CvType.CV_16UC1); 404 405 Imgproc.convertMaps(map1, map2, dstmap1, dstmap2, CvType.CV_16SC2, false); 406 // TODO_: write better test (last param == true) 407 408 Mat truthMap1 = new Mat(1, 3, CvType.CV_16SC2); 409 truthMap1.put(0, 0, 2, 4, 2, 4, 2, 4); 410 assertMatEqual(truthMap1, dstmap1); 411 Mat truthMap2 = new Mat(1, 3, CvType.CV_16UC1, new Scalar(0)); 412 assertMatEqual(truthMap2, dstmap2); 413 } 414 415 public void testConvexHullMatMat() { 416 MatOfPoint points = new MatOfPoint( 417 new Point(20, 0), 418 new Point(40, 0), 419 new Point(30, 20), 420 new Point(0, 20), 421 new Point(20, 10), 422 new Point(30, 10) 423 ); 424 425 MatOfInt hull = new MatOfInt(); 426 427 Imgproc.convexHull(points, hull); 428 429 MatOfInt expHull = new MatOfInt( 430 1, 2, 3, 0 431 ); 432 assertMatEqual(expHull, hull, EPS); 433 } 434 435 public void testConvexHullMatMatBooleanBoolean() { 436 MatOfPoint points = new MatOfPoint( 437 new Point(2, 0), 438 new Point(4, 0), 439 new Point(3, 2), 440 new Point(0, 2), 441 new Point(2, 1), 442 new Point(3, 1) 443 ); 444 445 MatOfInt hull = new MatOfInt(); 446 447 Imgproc.convexHull(points, hull, true); 448 449 MatOfInt expHull = new MatOfInt( 450 3, 2, 1, 0 451 ); 452 assertMatEqual(expHull, hull, EPS); 453 } 454 455 public void testConvexityDefects() { 456 MatOfPoint points = new MatOfPoint( 457 new Point(20, 0), 458 new Point(40, 0), 459 new Point(30, 20), 460 new Point(0, 20), 461 new Point(20, 10), 462 new Point(30, 10) 463 ); 464 465 MatOfInt hull = new MatOfInt(); 466 Imgproc.convexHull(points, hull); 467 468 MatOfInt4 convexityDefects = new MatOfInt4(); 469 Imgproc.convexityDefects(points, hull, convexityDefects); 470 471 assertMatEqual(new MatOfInt4(3, 0, 5, 3620), convexityDefects); 472 } 473 474 public void testCornerEigenValsAndVecsMatMatIntInt() { 475 fail("Not yet implemented"); 476 // TODO: write better test 477 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32FC1); 478 src.put(0, 0, 1, 2); 479 src.put(1, 0, 4, 2); 480 481 int blockSize = 3; 482 int ksize = 5; 483 484 // TODO: eigen vals and vectors returned = 0 for most src matrices 485 Imgproc.cornerEigenValsAndVecs(src, dst, blockSize, ksize); 486 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32FC(6), new Scalar(0)); 487 assertMatEqual(truth, dst, EPS); 488 } 489 490 public void testCornerEigenValsAndVecsMatMatIntIntInt() { 491 fail("Not yet implemented"); 492 // TODO: write better test 493 Mat src = new Mat(4, 4, CvType.CV_32FC1, new Scalar(128)); 494 495 int blockSize = 3; 496 int ksize = 5; 497 498 truth = new Mat(4, 4, CvType.CV_32FC(6), new Scalar(0)); 499 500 Imgproc.cornerEigenValsAndVecs(src, dst, blockSize, ksize, Core.BORDER_REFLECT); 501 assertMatEqual(truth, dst, EPS); 502 } 503 504 public void testCornerHarrisMatMatIntIntDouble() { 505 fail("Not yet implemented"); 506 // TODO: write better test 507 508 truth = new Mat(matSize, matSize, CvType.CV_32FC1, new Scalar(0)); 509 int blockSize = 5; 510 int ksize = 7; 511 double k = 0.1; 512 Imgproc.cornerHarris(gray128, dst, blockSize, ksize, k); 513 assertMatEqual(truth, dst, EPS); 514 } 515 516 public void testCornerHarrisMatMatIntIntDoubleInt() { 517 fail("Not yet implemented"); 518 // TODO: write better test 519 520 truth = new Mat(matSize, matSize, CvType.CV_32FC1, new Scalar(0)); 521 int blockSize = 5; 522 int ksize = 7; 523 double k = 0.1; 524 Imgproc.cornerHarris(gray255, dst, blockSize, ksize, k, Core.BORDER_REFLECT); 525 assertMatEqual(truth, dst, EPS); 526 } 527 528 public void testCornerMinEigenValMatMatInt() { 529 fail("Not yet implemented"); 530 // TODO: write better test 531 532 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32FC1); 533 src.put(0, 0, 1, 2); 534 src.put(1, 0, 2, 1); 535 int blockSize = 5; 536 537 Imgproc.cornerMinEigenVal(src, dst, blockSize); 538 539 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32FC1, new Scalar(0)); 540 assertMatEqual(truth, dst, EPS); 541 542 Imgproc.cornerMinEigenVal(gray255, dst, blockSize); 543 544 truth = new Mat(matSize, matSize, CvType.CV_32FC1, new Scalar(0)); 545 assertMatEqual(truth, dst, EPS); 546 } 547 548 public void testCornerMinEigenValMatMatIntInt() { 549 Mat src = Mat.eye(3, 3, CvType.CV_32FC1); 550 int blockSize = 3; 551 int ksize = 5; 552 553 Imgproc.cornerMinEigenVal(src, dst, blockSize, ksize); 554 555 truth = new Mat(3, 3, CvType.CV_32FC1) { 556 { 557 put(0, 0, 1. / 18, 1. / 36, 1. / 18); 558 put(1, 0, 1. / 36, 1. / 18, 1. / 36); 559 put(2, 0, 1. / 18, 1. / 36, 1. / 18); 560 } 561 }; 562 assertMatEqual(truth, dst, EPS); 563 } 564 565 public void testCornerMinEigenValMatMatIntIntInt() { 566 Mat src = Mat.eye(3, 3, CvType.CV_32FC1); 567 int blockSize = 3; 568 int ksize = 5; 569 570 Imgproc.cornerMinEigenVal(src, dst, blockSize, ksize, Core.BORDER_REFLECT); 571 572 truth = new Mat(3, 3, CvType.CV_32FC1) { 573 { 574 put(0, 0, 0.68055558, 0.92708349, 0.5868057); 575 put(1, 0, 0.92708343, 0.92708343, 0.92708343); 576 put(2, 0, 0.58680564, 0.92708343, 0.68055564); 577 } 578 }; 579 assertMatEqual(truth, dst, EPS); 580 } 581 582 public void testCornerSubPix() { 583 Mat img = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(128)); 584 Point truthPosition = new Point(img.cols() / 2, img.rows() / 2); 585 586 Rect r = new Rect(new Point(0, 0), truthPosition); 587 Imgproc.rectangle(img, r.tl(), r.br(), new Scalar(0), Core.FILLED); 588 MatOfPoint2f corners = new MatOfPoint2f(new Point(truthPosition.x + 1, truthPosition.y + 1)); 589 Size winSize = new Size(2, 2); 590 Size zeroZone = new Size(-1, -1); 591 TermCriteria criteria = new TermCriteria(TermCriteria.EPS, 0, 0.01); 592 593 Imgproc.cornerSubPix(img, corners, winSize, zeroZone, criteria); 594 595 assertPointEquals(truthPosition, corners.toList().get(0), weakEPS); 596 } 597 598 public void testCvtColorMatMatInt() { 599 fail("Not yet implemented"); 600 } 601 602 public void testCvtColorMatMatIntInt() { 603 fail("Not yet implemented"); 604 } 605 606 public void testDilateMatMatMat() { 607 Mat kernel = new Mat(); 608 609 Imgproc.dilate(gray255, dst, kernel); 610 611 assertMatEqual(gray255, dst); 612 613 Imgproc.dilate(gray1, dst, kernel); 614 615 assertMatEqual(gray1, dst); 616 // TODO_: write better test 617 } 618 619 public void testDilateMatMatMatPoint() { 620 fail("Not yet implemented"); 621 } 622 623 public void testDilateMatMatMatPointInt() { 624 fail("Not yet implemented"); 625 } 626 627 public void testDilateMatMatMatPointIntInt() { 628 fail("Not yet implemented"); 629 } 630 631 public void testDilateMatMatMatPointIntIntScalar() { 632 fail("Not yet implemented"); 633 } 634 635 public void testDistanceTransformWithLabels() { 636 Mat dstLables = getMat(CvType.CV_32SC1, 0); 637 Mat labels = new Mat(); 638 639 Imgproc.distanceTransformWithLabels(gray128, dst, labels, Imgproc.CV_DIST_L2, 3); 640 641 assertMatEqual(dstLables, labels); 642 assertMatEqual(getMat(CvType.CV_32FC1, 8192), dst, EPS); 643 } 644 645 public void testDrawContoursMatListOfMatIntScalar() { 646 Imgproc.rectangle(gray0, new Point(1, 2), new Point(7, 8), new Scalar(100)); 647 List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 648 Imgproc.findContours(gray0, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 649 650 Imgproc.drawContours(gray0, contours, -1, new Scalar(0)); 651 652 assertEquals(0, Core.countNonZero(gray0)); 653 } 654 655 public void testDrawContoursMatListOfMatIntScalarInt() { 656 Imgproc.rectangle(gray0, new Point(1, 2), new Point(7, 8), new Scalar(100)); 657 List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 658 Imgproc.findContours(gray0, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 659 660 Imgproc.drawContours(gray0, contours, -1, new Scalar(0), Core.FILLED); 661 662 assertEquals(0, Core.countNonZero(gray0)); 663 } 664 665 666 public void testDrawContoursMatListOfMatIntScalarIntIntMatIntPoint() { 667 fail("Not yet implemented"); 668 } 669 670 public void testEqualizeHist() { 671 Imgproc.equalizeHist(gray0, dst); 672 assertMatEqual(gray0, dst); 673 674 Imgproc.equalizeHist(gray255, dst); 675 assertMatEqual(gray255, dst); 676 // TODO_: write better test 677 } 678 679 public void testErodeMatMatMat() { 680 Mat kernel = new Mat(); 681 682 Imgproc.erode(gray128, dst, kernel); 683 684 assertMatEqual(gray128, dst); 685 } 686 687 public void testErodeMatMatMatPointInt() { 688 Mat src = new Mat(3, 3, CvType.CV_8U) { 689 { 690 put(0, 0, 15, 9, 10); 691 put(1, 0, 10, 8, 12); 692 put(2, 0, 12, 20, 25); 693 } 694 }; 695 Mat kernel = new Mat(); 696 697 Imgproc.erode(src, dst, kernel, anchorPoint, 10); 698 699 truth = new Mat(3, 3, CvType.CV_8U, new Scalar(8)); 700 assertMatEqual(truth, dst); 701 } 702 703 public void testErodeMatMatMatPointIntIntScalar() { 704 Mat src = new Mat(3, 3, CvType.CV_8U) { 705 { 706 put(0, 0, 15, 9, 10); 707 put(1, 0, 10, 8, 12); 708 put(2, 0, 12, 20, 25); 709 } 710 }; 711 Mat kernel = new Mat(); 712 Scalar sc = new Scalar(3, 3); 713 714 Imgproc.erode(src, dst, kernel, anchorPoint, 10, Core.BORDER_REFLECT, sc); 715 716 truth = new Mat(3, 3, CvType.CV_8U, new Scalar(8)); 717 assertMatEqual(truth, dst); 718 } 719 720 public void testFilter2DMatMatIntMat() { 721 Mat src = Mat.eye(4, 4, CvType.CV_32F); 722 Mat kernel = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(1)); 723 724 Imgproc.filter2D(src, dst, -1, kernel); 725 726 truth = new Mat(4, 4, CvType.CV_32F) { 727 { 728 put(0, 0, 2, 2, 1, 0); 729 put(1, 0, 2, 2, 1, 0); 730 put(2, 0, 1, 1, 2, 1); 731 put(3, 0, 0, 0, 1, 2); 732 } 733 }; 734 assertMatEqual(truth, dst, EPS); 735 } 736 737 public void testFilter2DMatMatIntMatPointDouble() { 738 fail("Not yet implemented"); 739 } 740 741 public void testFilter2DMatMatIntMatPointDoubleInt() { 742 Mat kernel = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(0)); 743 Point point = new Point(0, 0); 744 745 Imgproc.filter2D(gray128, dst, -1, kernel, point, 2, Core.BORDER_CONSTANT); 746 747 assertMatEqual(gray2, dst); 748 } 749 750 public void testFindContoursMatListOfMatMatIntInt() { 751 Mat img = new Mat(50, 50, CvType.CV_8UC1, new Scalar(0)); 752 List<MatOfPoint> contours = new ArrayList<MatOfPoint>(5); 753 Mat hierarchy = new Mat(); 754 755 Imgproc.findContours(img, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 756 757 // no contours on empty image 758 assertEquals(contours.size(), 0); 759 assertEquals(contours.size(), hierarchy.total()); 760 761 Imgproc.rectangle(img, new Point(10, 20), new Point(20, 30), new Scalar(100), 3, Imgproc.LINE_AA, 0); 762 Imgproc.rectangle(img, new Point(30, 35), new Point(40, 45), new Scalar(200)); 763 764 Imgproc.findContours(img, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 765 766 // two contours of two rectangles 767 assertEquals(contours.size(), 2); 768 assertEquals(contours.size(), hierarchy.total()); 769 } 770 771 public void testFindContoursMatListOfMatMatIntIntPoint() { 772 Mat img = new Mat(50, 50, CvType.CV_8UC1, new Scalar(0)); 773 Mat img2 = img.submat(5, 50, 3, 50); 774 List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 775 List<MatOfPoint> contours2 = new ArrayList<MatOfPoint>(); 776 Mat hierarchy = new Mat(); 777 778 Imgproc.rectangle(img, new Point(10, 20), new Point(20, 30), new Scalar(100), 3, Imgproc.LINE_AA, 0); 779 Imgproc.rectangle(img, new Point(30, 35), new Point(40, 45), new Scalar(200)); 780 781 Imgproc.findContours(img, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 782 Imgproc.findContours(img2, contours2, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE, new Point(3, 5)); 783 784 assertEquals(contours.size(), contours2.size()); 785 assertMatEqual(contours.get(0), contours2.get(0)); 786 /* 787 Log.d("findContours", "hierarchy=" + hierarchy); 788 int iBuff[] = new int[ (int) (hierarchy.total() * hierarchy.channels()) ]; // [ Contour0 (next sibling num, previous sibling num, 1st child num, parent num), Contour1(...), ... 789 hierarchy.get(0, 0, iBuff); 790 Log.d("findContours", Arrays.toString(iBuff)); 791 */ 792 } 793 794 public void testFitEllipse() { 795 MatOfPoint2f points = new MatOfPoint2f(new Point(0, 0), new Point(-1, 1), new Point(1, 1), new Point(1, -1), new Point(-1, -1)); 796 RotatedRect rrect = new RotatedRect(); 797 798 rrect = Imgproc.fitEllipse(points); 799 800 assertPointEquals(new Point(0, 0), rrect.center, EPS); 801 assertEquals(2.828, rrect.size.width, EPS); 802 assertEquals(2.828, rrect.size.height, EPS); 803 } 804 805 public void testFitLine() { 806 Mat points = new Mat(1, 4, CvType.CV_32FC2); 807 points.put(0, 0, 0, 0, 2, 3, 3, 4, 5, 8); 808 809 Mat linePoints = new Mat(4, 1, CvType.CV_32FC1); 810 linePoints.put(0, 0, 0.53196341, 0.84676737, 2.496531, 3.7467217); 811 812 Imgproc.fitLine(points, dst, Imgproc.CV_DIST_L12, 0, 0.01, 0.01); 813 814 assertMatEqual(linePoints, dst, EPS); 815 } 816 817 public void testFloodFillMatMatPointScalar() { 818 Mat mask = new Mat(matSize + 2, matSize + 2, CvType.CV_8U, new Scalar(0)); 819 Mat img = gray0; 820 Imgproc.circle(mask, new Point(matSize / 2 + 1, matSize / 2 + 1), 3, new Scalar(2)); 821 822 int retval = Imgproc.floodFill(img, mask, new Point(matSize / 2, matSize / 2), new Scalar(1)); 823 824 assertEquals(Core.countNonZero(img), retval); 825 Imgproc.circle(mask, new Point(matSize / 2 + 1, matSize / 2 + 1), 3, new Scalar(0)); 826 assertEquals(retval + 4 * (matSize + 1), Core.countNonZero(mask)); 827 assertMatEqual(mask.submat(1, matSize + 1, 1, matSize + 1), img); 828 } 829 830 public void testFloodFillMatMatPointScalar_WithoutMask() { 831 Mat img = gray0; 832 Imgproc.circle(img, new Point(matSize / 2, matSize / 2), 3, new Scalar(2)); 833 834 // TODO: ideally we should pass null instead of "new Mat()" 835 int retval = Imgproc.floodFill(img, new Mat(), new Point(matSize / 2, matSize / 2), new Scalar(1)); 836 837 Imgproc.circle(img, new Point(matSize / 2, matSize / 2), 3, new Scalar(0)); 838 assertEquals(Core.countNonZero(img), retval); 839 } 840 841 public void testFloodFillMatMatPointScalarRect() { 842 fail("Not yet implemented"); 843 } 844 845 public void testFloodFillMatMatPointScalarRectScalar() { 846 fail("Not yet implemented"); 847 } 848 849 public void testFloodFillMatMatPointScalarRectScalarScalar() { 850 fail("Not yet implemented"); 851 } 852 853 public void testFloodFillMatMatPointScalarRectScalarScalarInt() { 854 fail("Not yet implemented"); 855 } 856 857 public void testGaussianBlurMatMatSizeDouble() { 858 Imgproc.GaussianBlur(gray0, dst, size, 1); 859 assertMatEqual(gray0, dst); 860 861 Imgproc.GaussianBlur(gray2, dst, size, 1); 862 assertMatEqual(gray2, dst); 863 } 864 865 public void testGaussianBlurMatMatSizeDoubleDouble() { 866 Imgproc.GaussianBlur(gray2, dst, size, 0, 0); 867 868 assertMatEqual(gray2, dst); 869 // TODO_: write better test 870 } 871 872 public void testGaussianBlurMatMatSizeDoubleDoubleInt() { 873 Imgproc.GaussianBlur(gray2, dst, size, 1, 3, Core.BORDER_REFLECT); 874 875 assertMatEqual(gray2, dst); 876 // TODO_: write better test 877 } 878 879 public void testGetAffineTransform() { 880 MatOfPoint2f src = new MatOfPoint2f(new Point(2, 3), new Point(3, 1), new Point(1, 4)); 881 MatOfPoint2f dst = new MatOfPoint2f(new Point(3, 3), new Point(7, 4), new Point(5, 6)); 882 883 Mat transform = Imgproc.getAffineTransform(src, dst); 884 885 Mat truth = new Mat(2, 3, CvType.CV_64FC1) { 886 { 887 put(0, 0, -8, -6, 37); 888 put(1, 0, -7, -4, 29); 889 } 890 }; 891 assertMatEqual(truth, transform, EPS); 892 } 893 894 public void testGetDefaultNewCameraMatrixMat() { 895 Mat mtx = Imgproc.getDefaultNewCameraMatrix(gray0); 896 897 assertFalse(mtx.empty()); 898 assertEquals(0, Core.countNonZero(mtx)); 899 } 900 901 public void testGetDefaultNewCameraMatrixMatSizeBoolean() { 902 Mat mtx = Imgproc.getDefaultNewCameraMatrix(gray0, size, true); 903 904 assertFalse(mtx.empty()); 905 assertFalse(0 == Core.countNonZero(mtx)); 906 // TODO_: write better test 907 } 908 909 public void testGetDerivKernelsMatMatIntIntInt() { 910 Mat kx = new Mat(imgprocSz, imgprocSz, CvType.CV_32F); 911 Mat ky = new Mat(imgprocSz, imgprocSz, CvType.CV_32F); 912 Mat expKx = new Mat(3, 1, CvType.CV_32F); 913 Mat expKy = new Mat(3, 1, CvType.CV_32F); 914 kx.put(0, 0, 1, 1); 915 kx.put(1, 0, 1, 1); 916 ky.put(0, 0, 2, 2); 917 ky.put(1, 0, 2, 2); 918 expKx.put(0, 0, 1, -2, 1); 919 expKy.put(0, 0, 1, -2, 1); 920 921 Imgproc.getDerivKernels(kx, ky, 2, 2, 3); 922 923 assertMatEqual(expKx, kx, EPS); 924 assertMatEqual(expKy, ky, EPS); 925 } 926 927 public void testGetDerivKernelsMatMatIntIntIntBooleanInt() { 928 Mat kx = new Mat(imgprocSz, imgprocSz, CvType.CV_32F); 929 Mat ky = new Mat(imgprocSz, imgprocSz, CvType.CV_32F); 930 Mat expKx = new Mat(3, 1, CvType.CV_32F); 931 Mat expKy = new Mat(3, 1, CvType.CV_32F); 932 kx.put(0, 0, 1, 1); 933 kx.put(1, 0, 1, 1); 934 ky.put(0, 0, 2, 2); 935 ky.put(1, 0, 2, 2); 936 expKx.put(0, 0, 1, -2, 1); 937 expKy.put(0, 0, 1, -2, 1); 938 939 Imgproc.getDerivKernels(kx, ky, 2, 2, 3, true, CvType.CV_32F); 940 941 assertMatEqual(expKx, kx, EPS); 942 assertMatEqual(expKy, ky, EPS); 943 // TODO_: write better test 944 } 945 946 public void testGetGaussianKernelIntDouble() { 947 dst = Imgproc.getGaussianKernel(1, 0.5); 948 949 truth = new Mat(1, 1, CvType.CV_64FC1, new Scalar(1)); 950 assertMatEqual(truth, dst, EPS); 951 } 952 953 public void testGetGaussianKernelIntDoubleInt() { 954 dst = Imgproc.getGaussianKernel(3, 0.8, CvType.CV_32F); 955 956 truth = new Mat(3, 1, CvType.CV_32F); 957 truth.put(0, 0, 0.23899426, 0.52201146, 0.23899426); 958 assertMatEqual(truth, dst, EPS); 959 } 960 961 public void testGetPerspectiveTransform() { 962 fail("Not yet implemented"); 963 } 964 965 public void testGetRectSubPixMatSizePointMat() { 966 Size size = new Size(3, 3); 967 Point center = new Point(gray255.cols() / 2, gray255.rows() / 2); 968 969 Imgproc.getRectSubPix(gray255, size, center, dst); 970 971 truth = new Mat(3, 3, CvType.CV_8U, new Scalar(255)); 972 assertMatEqual(truth, dst); 973 } 974 975 public void testGetRectSubPixMatSizePointMatInt() { 976 Mat src = new Mat(10, 10, CvType.CV_32F, new Scalar(2)); 977 Size patchSize = new Size(5, 5); 978 Point center = new Point(src.cols() / 2, src.rows() / 2); 979 980 Imgproc.getRectSubPix(src, patchSize, center, dst); 981 982 truth = new Mat(5, 5, CvType.CV_32F, new Scalar(2)); 983 assertMatEqual(truth, dst, EPS); 984 } 985 986 public void testGetRotationMatrix2D() { 987 Point center = new Point(0, 0); 988 989 dst = Imgproc.getRotationMatrix2D(center, 0, 1); 990 991 truth = new Mat(2, 3, CvType.CV_64F) { 992 { 993 put(0, 0, 1, 0, 0); 994 put(1, 0, 0, 1, 0); 995 } 996 }; 997 998 assertMatEqual(truth, dst, EPS); 999 } 1000 1001 public void testGetStructuringElementIntSize() { 1002 dst = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, size); 1003 1004 truth = new Mat(3, 3, CvType.CV_8UC1, new Scalar(1)); 1005 assertMatEqual(truth, dst); 1006 } 1007 1008 public void testGetStructuringElementIntSizePoint() { 1009 dst = Imgproc.getStructuringElement(Imgproc.MORPH_CROSS, size, anchorPoint); 1010 1011 truth = new Mat(3, 3, CvType.CV_8UC1) { 1012 { 1013 put(0, 0, 0, 0, 1); 1014 put(1, 0, 0, 0, 1); 1015 put(2, 0, 1, 1, 1); 1016 } 1017 }; 1018 assertMatEqual(truth, dst); 1019 } 1020 1021 public void testGoodFeaturesToTrackMatListOfPointIntDoubleDouble() { 1022 Mat src = gray0; 1023 Imgproc.rectangle(src, new Point(2, 2), new Point(8, 8), new Scalar(100), -1); 1024 MatOfPoint lp = new MatOfPoint(); 1025 1026 Imgproc.goodFeaturesToTrack(src, lp, 100, 0.01, 3); 1027 1028 assertEquals(4, lp.total()); 1029 } 1030 1031 public void testGoodFeaturesToTrackMatListOfPointIntDoubleDoubleMatIntBooleanDouble() { 1032 Mat src = gray0; 1033 Imgproc.rectangle(src, new Point(2, 2), new Point(8, 8), new Scalar(100), -1); 1034 MatOfPoint lp = new MatOfPoint(); 1035 1036 Imgproc.goodFeaturesToTrack(src, lp, 100, 0.01, 3, gray1, 4, true, 0); 1037 1038 assertEquals(4, lp.total()); 1039 } 1040 1041 public void testGrabCutMatMatRectMatMatInt() { 1042 fail("Not yet implemented"); 1043 } 1044 1045 public void testGrabCutMatMatRectMatMatIntInt() { 1046 fail("Not yet implemented"); 1047 } 1048 1049 public void testHoughCirclesMatMatIntDoubleDouble() { 1050 int sz = 512; 1051 Mat img = new Mat(sz, sz, CvType.CV_8U, new Scalar(128)); 1052 Mat circles = new Mat(); 1053 1054 Imgproc.HoughCircles(img, circles, Imgproc.CV_HOUGH_GRADIENT, 2, img.rows() / 4); 1055 1056 assertEquals(0, circles.cols()); 1057 } 1058 1059 public void testHoughCirclesMatMatIntDoubleDouble1() { 1060 int sz = 512; 1061 Mat img = new Mat(sz, sz, CvType.CV_8U, new Scalar(128)); 1062 Mat circles = new Mat(); 1063 1064 Point center = new Point(img.cols() / 2, img.rows() / 2); 1065 int radius = Math.min(img.cols() / 4, img.rows() / 4); 1066 Imgproc.circle(img, center, radius, colorBlack, 3); 1067 1068 Imgproc.HoughCircles(img, circles, Imgproc.CV_HOUGH_GRADIENT, 2, img.rows() / 4); 1069 1070 assertEquals(1, circles.cols()); 1071 } 1072 1073 public void testHoughCirclesMatMatIntDoubleDoubleDoubleDoubleIntInt() { 1074 fail("Not yet implemented"); 1075 } 1076 1077 public void testHoughLinesMatMatDoubleDoubleInt() { 1078 int sz = 512; 1079 Mat img = new Mat(sz, sz, CvType.CV_8U, new Scalar(0)); 1080 Point point1 = new Point(50, 50); 1081 Point point2 = new Point(img.cols() / 2, img.rows() / 2); 1082 Imgproc.line(img, point1, point2, colorWhite, 1); 1083 Mat lines = new Mat(); 1084 1085 Imgproc.HoughLines(img, lines, 1, 3.1415926/180, 100); 1086 1087 assertEquals(1, lines.cols()); 1088 1089 /* 1090 Log.d("HoughLines", "lines=" + lines); 1091 int num = (int)lines.total(); 1092 int buff[] = new int[num*4]; //[ (x1, y1, x2, y2), (...), ...] 1093 lines.get(0, 0, buff); 1094 Log.d("HoughLines", "lines=" + Arrays.toString(buff)); 1095 */ 1096 } 1097 1098 public void testHoughLinesMatMatDoubleDoubleIntDouble() { 1099 fail("Not yet implemented"); 1100 } 1101 1102 public void testHoughLinesMatMatDoubleDoubleIntDoubleDouble() { 1103 fail("Not yet implemented"); 1104 } 1105 1106 public void testHoughLinesPMatMatDoubleDoubleInt() { 1107 int sz = 512; 1108 Mat img = new Mat(sz, sz, CvType.CV_8U, new Scalar(0)); 1109 Point point1 = new Point(0, 0); 1110 Point point2 = new Point(sz, sz); 1111 Point point3 = new Point(sz, 0); 1112 Point point4 = new Point(2*sz/3, sz/3); 1113 Imgproc.line(img, point1, point2, Scalar.all(255), 1); 1114 Imgproc.line(img, point3, point4, Scalar.all(255), 1); 1115 Mat lines = new Mat(); 1116 1117 Imgproc.HoughLinesP(img, lines, 1, 3.1415926/180, 100); 1118 1119 assertEquals(2, lines.cols()); 1120 1121 /* 1122 Log.d("HoughLinesP", "lines=" + lines); 1123 int num = (int)lines.cols(); 1124 int buff[] = new int[num*4]; // CV_32SC4 as [ (x1, y1, x2, y2), (...), ...] 1125 lines.get(0, 0, buff); 1126 Log.d("HoughLinesP", "lines=" + Arrays.toString(buff)); 1127 */ 1128 } 1129 1130 public void testHoughLinesPMatMatDoubleDoubleIntDouble() { 1131 fail("Not yet implemented"); 1132 } 1133 1134 public void testHoughLinesPMatMatDoubleDoubleIntDoubleDouble() { 1135 fail("Not yet implemented"); 1136 } 1137 1138 public void testHuMoments() { 1139 fail("Not yet implemented"); 1140 } 1141 1142 public void testInitUndistortRectifyMap() { 1143 fail("Not yet implemented"); 1144 Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F); 1145 cameraMatrix.put(0, 0, 1, 0, 1); 1146 cameraMatrix.put(1, 0, 0, 1, 1); 1147 cameraMatrix.put(2, 0, 0, 0, 1); 1148 1149 Mat R = new Mat(3, 3, CvType.CV_32F, new Scalar(2)); 1150 Mat newCameraMatrix = new Mat(3, 3, CvType.CV_32F, new Scalar(3)); 1151 1152 Mat distCoeffs = new Mat(); 1153 Mat map1 = new Mat(); 1154 Mat map2 = new Mat(); 1155 1156 // TODO: complete this test 1157 Imgproc.initUndistortRectifyMap(cameraMatrix, distCoeffs, R, newCameraMatrix, size, CvType.CV_32F, map1, map2); 1158 } 1159 1160 public void testInitWideAngleProjMapMatMatSizeIntIntMatMat() { 1161 fail("Not yet implemented"); 1162 Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F); 1163 Mat distCoeffs = new Mat(1, 4, CvType.CV_32F); 1164 // Size imageSize = new Size(2, 2); 1165 1166 cameraMatrix.put(0, 0, 1, 0, 1); 1167 cameraMatrix.put(1, 0, 0, 1, 2); 1168 cameraMatrix.put(2, 0, 0, 0, 1); 1169 1170 distCoeffs.put(0, 0, 1, 3, 2, 4); 1171 truth = new Mat(3, 3, CvType.CV_32F); 1172 truth.put(0, 0, 0, 0, 0); 1173 truth.put(1, 0, 0, 0, 0); 1174 truth.put(2, 0, 0, 3, 0); 1175 // TODO: No documentation for this function 1176 // Imgproc.initWideAngleProjMap(cameraMatrix, distCoeffs, imageSize, 1177 // 5, m1type, truthput1, truthput2); 1178 } 1179 1180 public void testInitWideAngleProjMapMatMatSizeIntIntMatMatInt() { 1181 fail("Not yet implemented"); 1182 } 1183 1184 public void testInitWideAngleProjMapMatMatSizeIntIntMatMatIntDouble() { 1185 fail("Not yet implemented"); 1186 } 1187 1188 public void testIntegral2MatMatMat() { 1189 Mat src = new Mat(3, 3, CvType.CV_32F, new Scalar(3)); 1190 Mat expSum = new Mat(4, 4, CvType.CV_64F); 1191 Mat expSqsum = new Mat(4, 4, CvType.CV_64F); 1192 Mat sum = new Mat(); 1193 Mat sqsum = new Mat(); 1194 1195 expSum.put(0, 0, 0, 0, 0, 0); 1196 expSum.put(1, 0, 0, 3, 6, 9); 1197 expSum.put(2, 0, 0, 6, 12, 18); 1198 expSum.put(3, 0, 0, 9, 18, 27); 1199 1200 expSqsum.put(0, 0, 0, 0, 0, 0); 1201 expSqsum.put(1, 0, 0, 9, 18, 27); 1202 expSqsum.put(2, 0, 0, 18, 36, 54); 1203 expSqsum.put(3, 0, 0, 27, 54, 81); 1204 1205 Imgproc.integral2(src, sum, sqsum); 1206 1207 assertMatEqual(expSum, sum, EPS); 1208 assertMatEqual(expSqsum, sqsum, EPS); 1209 } 1210 1211 public void testIntegral2MatMatMatInt() { 1212 Mat src = new Mat(3, 3, CvType.CV_32F, new Scalar(3)); 1213 Mat expSum = new Mat(4, 4, CvType.CV_64F); 1214 Mat expSqsum = new Mat(4, 4, CvType.CV_64F); 1215 Mat sum = new Mat(); 1216 Mat sqsum = new Mat(); 1217 1218 expSum.put(0, 0, 0, 0, 0, 0); 1219 expSum.put(1, 0, 0, 3, 6, 9); 1220 expSum.put(2, 0, 0, 6, 12, 18); 1221 expSum.put(3, 0, 0, 9, 18, 27); 1222 1223 expSqsum.put(0, 0, 0, 0, 0, 0); 1224 expSqsum.put(1, 0, 0, 9, 18, 27); 1225 expSqsum.put(2, 0, 0, 18, 36, 54); 1226 expSqsum.put(3, 0, 0, 27, 54, 81); 1227 1228 Imgproc.integral2(src, sum, sqsum, CvType.CV_64F, CvType.CV_64F); 1229 1230 assertMatEqual(expSum, sum, EPS); 1231 assertMatEqual(expSqsum, sqsum, EPS); 1232 } 1233 1234 public void testIntegral3MatMatMatMat() { 1235 Mat src = new Mat(1, 1, CvType.CV_32F, new Scalar(1)); 1236 Mat expSum = new Mat(imgprocSz, imgprocSz, CvType.CV_64F); 1237 Mat expSqsum = new Mat(imgprocSz, imgprocSz, CvType.CV_64F); 1238 Mat expTilted = new Mat(imgprocSz, imgprocSz, CvType.CV_64F); 1239 Mat sum = new Mat(); 1240 Mat sqsum = new Mat(); 1241 Mat tilted = new Mat(); 1242 1243 expSum.put(0, 0, 0, 0); 1244 expSum.put(1, 0, 0, 1); 1245 1246 expSqsum.put(0, 0, 0, 0); 1247 expSqsum.put(1, 0, 0, 1); 1248 1249 expTilted.put(0, 0, 0, 0); 1250 expTilted.put(1, 0, 0, 1); 1251 1252 Imgproc.integral3(src, sum, sqsum, tilted); 1253 1254 assertMatEqual(expSum, sum, EPS); 1255 assertMatEqual(expSqsum, sqsum, EPS); 1256 assertMatEqual(expTilted, tilted, EPS); 1257 } 1258 1259 public void testIntegral3MatMatMatMatInt() { 1260 Mat src = new Mat(1, 1, CvType.CV_32F, new Scalar(1)); 1261 Mat expSum = new Mat(imgprocSz, imgprocSz, CvType.CV_64F); 1262 Mat expSqsum = new Mat(imgprocSz, imgprocSz, CvType.CV_64F); 1263 Mat expTilted = new Mat(imgprocSz, imgprocSz, CvType.CV_64F); 1264 Mat sum = new Mat(); 1265 Mat sqsum = new Mat(); 1266 Mat tilted = new Mat(); 1267 1268 expSum.put(0, 0, 0, 0); 1269 expSum.put(1, 0, 0, 1); 1270 1271 expSqsum.put(0, 0, 0, 0); 1272 expSqsum.put(1, 0, 0, 1); 1273 1274 expTilted.put(0, 0, 0, 0); 1275 expTilted.put(1, 0, 0, 1); 1276 1277 Imgproc.integral3(src, sum, sqsum, tilted, CvType.CV_64F, CvType.CV_64F); 1278 1279 assertMatEqual(expSum, sum, EPS); 1280 assertMatEqual(expSqsum, sqsum, EPS); 1281 assertMatEqual(expTilted, tilted, EPS); 1282 } 1283 1284 public void testIntegralMatMat() { 1285 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(2)); 1286 1287 Imgproc.integral(src, dst); 1288 1289 truth = new Mat(3, 3, CvType.CV_64F) { 1290 { 1291 put(0, 0, 0, 0, 0); 1292 put(1, 0, 0, 2, 4); 1293 put(2, 0, 0, 4, 8); 1294 } 1295 }; 1296 assertMatEqual(truth, dst, EPS); 1297 } 1298 1299 public void testIntegralMatMatInt() { 1300 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(2)); 1301 1302 Imgproc.integral(src, dst, CvType.CV_64F); 1303 1304 truth = new Mat(3, 3, CvType.CV_64F) { 1305 { 1306 put(0, 0, 0, 0, 0); 1307 put(1, 0, 0, 2, 4); 1308 put(2, 0, 0, 4, 8); 1309 } 1310 }; 1311 assertMatEqual(truth, dst, EPS); 1312 } 1313 1314 public void testInvertAffineTransform() { 1315 Mat src = new Mat(2, 3, CvType.CV_64F, new Scalar(1)); 1316 1317 Imgproc.invertAffineTransform(src, dst); 1318 1319 truth = new Mat(2, 3, CvType.CV_64F, new Scalar(0)); 1320 assertMatEqual(truth, dst, EPS); 1321 } 1322 1323 public void testIsContourConvex() { 1324 MatOfPoint contour1 = new MatOfPoint(new Point(0, 0), new Point(10, 0), new Point(10, 10), new Point(5, 4)); 1325 1326 assertFalse(Imgproc.isContourConvex(contour1)); 1327 1328 MatOfPoint contour2 = new MatOfPoint(new Point(0, 0), new Point(10, 0), new Point(10, 10), new Point(5, 6)); 1329 1330 assertTrue(Imgproc.isContourConvex(contour2)); 1331 } 1332 1333 public void testLaplacianMatMatInt() { 1334 Imgproc.Laplacian(gray0, dst, CvType.CV_8U); 1335 1336 assertMatEqual(gray0, dst); 1337 } 1338 1339 public void testLaplacianMatMatIntIntDoubleDouble() { 1340 Mat src = Mat.eye(imgprocSz, imgprocSz, CvType.CV_32F); 1341 1342 Imgproc.Laplacian(src, dst, CvType.CV_32F, 1, 2, EPS); 1343 1344 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32F) { 1345 { 1346 put(0, 0, -7.9990001, 8.0009995); 1347 put(1, 0, 8.0009995, -7.9990001); 1348 } 1349 }; 1350 assertMatEqual(truth, dst, EPS); 1351 } 1352 1353 public void testLaplacianMatMatIntIntDoubleDoubleInt() { 1354 Mat src = new Mat(3, 3, CvType.CV_32F, new Scalar(2)); 1355 1356 Imgproc.Laplacian(src, dst, CvType.CV_32F, 1, 2, EPS, Core.BORDER_REFLECT); 1357 1358 truth = new Mat(3, 3, CvType.CV_32F, new Scalar(0.00099945068)); 1359 assertMatEqual(truth, dst, EPS); 1360 } 1361 1362 public void testMatchShapes() { 1363 Mat contour1 = new Mat(1, 4, CvType.CV_32FC2); 1364 Mat contour2 = new Mat(1, 4, CvType.CV_32FC2); 1365 contour1.put(0, 0, 1, 1, 5, 1, 4, 3, 6, 2); 1366 contour2.put(0, 0, 1, 1, 6, 1, 4, 1, 2, 5); 1367 1368 double distance = Imgproc.matchShapes(contour1, contour2, Imgproc.CV_CONTOURS_MATCH_I1, 1); 1369 1370 assertEquals(2.81109697365334, distance, EPS); 1371 } 1372 1373 public void testMatchTemplate() { 1374 Mat image = new Mat(imgprocSz, imgprocSz, CvType.CV_8U); 1375 Mat templ = new Mat(imgprocSz, imgprocSz, CvType.CV_8U); 1376 image.put(0, 0, 1, 2, 3, 4); 1377 templ.put(0, 0, 5, 6, 7, 8); 1378 1379 Imgproc.matchTemplate(image, templ, dst, Imgproc.TM_CCORR); 1380 1381 truth = new Mat(1, 1, CvType.CV_32F, new Scalar(70)); 1382 assertMatEqual(truth, dst, EPS); 1383 1384 Imgproc.matchTemplate(gray255, gray0, dst, Imgproc.TM_CCORR); 1385 1386 truth = new Mat(1, 1, CvType.CV_32F, new Scalar(0)); 1387 assertMatEqual(truth, dst, EPS); 1388 } 1389 1390 public void testMedianBlur() { 1391 Imgproc.medianBlur(gray255, dst, 5); 1392 assertMatEqual(gray255, dst); 1393 1394 Imgproc.medianBlur(gray2, dst, 3); 1395 assertMatEqual(gray2, dst); 1396 // TODO_: write better test 1397 } 1398 1399 public void testMinAreaRect() { 1400 MatOfPoint2f points = new MatOfPoint2f(new Point(1, 1), new Point(5, 1), new Point(4, 3), new Point(6, 2)); 1401 1402 RotatedRect rrect = Imgproc.minAreaRect(points); 1403 1404 assertEquals(new Size(2, 5), rrect.size); 1405 assertEquals(-90., rrect.angle); 1406 assertEquals(new Point(3.5, 2), rrect.center); 1407 } 1408 1409 public void testMinEnclosingCircle() { 1410 MatOfPoint2f points = new MatOfPoint2f(new Point(0, 0), new Point(-1, 0), new Point(0, -1), new Point(1, 0), new Point(0, 1)); 1411 Point actualCenter = new Point(); 1412 float[] radius = new float[1]; 1413 1414 Imgproc.minEnclosingCircle(points, actualCenter, radius); 1415 1416 assertEquals(new Point(0, 0), actualCenter); 1417 assertEquals(1.03f, radius[0], EPS); 1418 } 1419 1420 public void testMomentsMat() { 1421 fail("Not yet implemented"); 1422 } 1423 1424 public void testMomentsMatBoolean() { 1425 fail("Not yet implemented"); 1426 } 1427 1428 public void testMorphologyExMatMatIntMat() { 1429 Imgproc.morphologyEx(gray255, dst, Imgproc.MORPH_GRADIENT, gray0); 1430 1431 assertMatEqual(gray0, dst); 1432 // TODO_: write better test 1433 } 1434 1435 public void testMorphologyExMatMatIntMatPointInt() { 1436 Mat src = Mat.eye(imgprocSz, imgprocSz, CvType.CV_8U); 1437 1438 Mat kernel = new Mat(imgprocSz, imgprocSz, CvType.CV_8U, new Scalar(0)); 1439 Point point = new Point(0, 0); 1440 1441 Imgproc.morphologyEx(src, dst, Imgproc.MORPH_CLOSE, kernel, point, 10); 1442 1443 truth = Mat.eye(imgprocSz, imgprocSz, CvType.CV_8U); 1444 assertMatEqual(truth, dst); 1445 // TODO_: write better test 1446 } 1447 1448 1449 public void testMorphologyExMatMatIntMatPointIntIntScalar() { 1450 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_8U); 1451 src.put(0, 0, 2, 1); 1452 src.put(1, 0, 2, 1); 1453 1454 Mat kernel = new Mat(imgprocSz, imgprocSz, CvType.CV_8U, new Scalar(1)); 1455 Point point = new Point(1, 1); 1456 Scalar sc = new Scalar(3, 3); 1457 1458 Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, kernel, point, 10, Core.BORDER_REFLECT, sc); 1459 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_8U) { 1460 { 1461 put(0, 0, 1, 0); 1462 put(1, 0, 1, 0); 1463 } 1464 }; 1465 assertMatEqual(truth, dst); 1466 // TODO_: write better test 1467 } 1468 1469 public void testPointPolygonTest() { 1470 MatOfPoint2f contour = new MatOfPoint2f(new Point(0, 0), new Point(1, 3), new Point(3, 4), new Point(4, 3), new Point(2, 1)); 1471 double sign1 = Imgproc.pointPolygonTest(contour, new Point(2, 2), false); 1472 assertEquals(1.0, sign1); 1473 1474 double sign2 = Imgproc.pointPolygonTest(contour, new Point(4, 4), true); 1475 assertEquals(-Math.sqrt(0.5), sign2); 1476 } 1477 1478 public void testPreCornerDetectMatMatInt() { 1479 Mat src = new Mat(4, 4, CvType.CV_32F, new Scalar(1)); 1480 int ksize = 3; 1481 1482 Imgproc.preCornerDetect(src, dst, ksize); 1483 1484 truth = new Mat(4, 4, CvType.CV_32F, new Scalar(0)); 1485 assertMatEqual(truth, dst, EPS); 1486 } 1487 1488 public void testPreCornerDetectMatMatIntInt() { 1489 Mat src = new Mat(4, 4, CvType.CV_32F, new Scalar(1)); 1490 int ksize = 3; 1491 1492 Imgproc.preCornerDetect(src, dst, ksize, Core.BORDER_REFLECT); 1493 1494 truth = new Mat(4, 4, CvType.CV_32F, new Scalar(0)); 1495 assertMatEqual(truth, dst, EPS); 1496 // TODO_: write better test 1497 } 1498 1499 public void testPyrDownMatMat() { 1500 Mat src = new Mat(4, 4, CvType.CV_32F) { 1501 { 1502 put(0, 0, 2, 1, 4, 2); 1503 put(1, 0, 3, 2, 6, 8); 1504 put(2, 0, 4, 6, 8, 10); 1505 put(3, 0, 12, 32, 6, 18); 1506 } 1507 }; 1508 1509 Imgproc.pyrDown(src, dst); 1510 1511 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32F) { 1512 { 1513 put(0, 0, 2.78125, 4.609375); 1514 put(1, 0, 8.546875, 8.8515625); 1515 } 1516 }; 1517 assertMatEqual(truth, dst, EPS); 1518 } 1519 1520 public void testPyrDownMatMatSize() { 1521 Mat src = new Mat(4, 4, CvType.CV_32F) { 1522 { 1523 put(0, 0, 2, 1, 4, 2); 1524 put(1, 0, 3, 2, 6, 8); 1525 put(2, 0, 4, 6, 8, 10); 1526 put(3, 0, 12, 32, 6, 18); 1527 } 1528 }; 1529 Size dstSize = new Size(2, 2); 1530 1531 Imgproc.pyrDown(src, dst, dstSize); 1532 1533 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32F) { 1534 { 1535 put(0, 0, 2.78125, 4.609375); 1536 put(1, 0, 8.546875, 8.8515625); 1537 } 1538 }; 1539 assertMatEqual(truth, dst, EPS); 1540 // TODO_: write better test 1541 } 1542 1543 public void testPyrMeanShiftFilteringMatMatDoubleDouble() { 1544 Mat src = new Mat(matSize, matSize, CvType.CV_8UC3, new Scalar(0)); 1545 1546 Imgproc.pyrMeanShiftFiltering(src, dst, 10, 50); 1547 1548 assertMatEqual(src, dst); 1549 // TODO_: write better test 1550 } 1551 1552 public void testPyrMeanShiftFilteringMatMatDoubleDoubleInt() { 1553 fail("Not yet implemented"); 1554 } 1555 1556 public void testPyrMeanShiftFilteringMatMatDoubleDoubleIntTermCriteria() { 1557 fail("Not yet implemented"); 1558 } 1559 1560 public void testPyrUpMatMat() { 1561 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32F); 1562 src.put(0, 0, 2, 1); 1563 src.put(1, 0, 3, 2); 1564 1565 Imgproc.pyrUp(src, dst); 1566 1567 truth = new Mat(4, 4, CvType.CV_32F) { 1568 { 1569 put(0, 0, 2, 1.75, 1.375, 1.25); 1570 put(1, 0, 2.25, 2, 1.625, 1.5); 1571 put(2, 0, 2.625, 2.375, 2, 1.875); 1572 put(3, 0, 2.75, 2.5, 2.125, 2); 1573 } 1574 }; 1575 assertMatEqual(truth, dst, EPS); 1576 } 1577 1578 public void testPyrUpMatMatSize() { 1579 fail("Not yet implemented"); 1580 } 1581 1582 public void testRemapMatMatMatMatInt() { 1583 fail("Not yet implemented"); 1584 // this test does something weird 1585 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(2)); 1586 Mat map1 = new Mat(1, 3, CvType.CV_32FC1); 1587 Mat map2 = new Mat(1, 3, CvType.CV_32FC1); 1588 1589 map1.put(0, 0, 3, 6, 5); 1590 map2.put(0, 0, 4, 8, 12); 1591 1592 Imgproc.remap(src, dst, map1, map2, Imgproc.INTER_LINEAR); 1593 1594 truth = new Mat(1, 3, CvType.CV_32F, new Scalar(0)); 1595 assertMatEqual(truth, dst, EPS); 1596 } 1597 1598 public void testRemapMatMatMatMatIntIntScalar() { 1599 fail("Not yet implemented"); 1600 // this test does something weird 1601 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(2)); 1602 Mat map1 = new Mat(1, 3, CvType.CV_32FC1); 1603 Mat map2 = new Mat(1, 3, CvType.CV_32FC1); 1604 1605 Scalar sc = new Scalar(0); 1606 1607 map1.put(0, 0, 3, 6, 5, 0); 1608 map2.put(0, 0, 4, 8, 12); 1609 1610 truth = new Mat(1, 3, CvType.CV_32F, new Scalar(2)); 1611 1612 Imgproc.remap(src, dst, map1, map2, Imgproc.INTER_LINEAR, Core.BORDER_REFLECT, sc); 1613 assertMatEqual(truth, dst, EPS); 1614 } 1615 1616 public void testResizeMatMatSize() { 1617 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_8UC1, new Scalar(1)); 1618 Size dsize = new Size(1, 1); 1619 1620 Imgproc.resize(src, dst, dsize); 1621 1622 truth = new Mat(1, 1, CvType.CV_8UC1, new Scalar(1)); 1623 assertMatEqual(truth, dst); 1624 } 1625 1626 public void testResizeMatMatSizeDoubleDoubleInt() { 1627 Imgproc.resize(gray255, dst, new Size(2, 2), 0, 0, Imgproc.INTER_AREA); 1628 1629 truth = new Mat(2, 2, CvType.CV_8UC1, new Scalar(255)); 1630 assertMatEqual(truth, dst); 1631 // TODO_: write better test 1632 } 1633 1634 public void testScharrMatMatIntIntInt() { 1635 Mat src = Mat.eye(imgprocSz, imgprocSz, CvType.CV_32F); 1636 1637 Imgproc.Scharr(src, dst, CvType.CV_32F, 1, 0); 1638 1639 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(0)); 1640 assertMatEqual(truth, dst, EPS); 1641 } 1642 1643 public void testScharrMatMatIntIntIntDoubleDouble() { 1644 Mat src = Mat.eye(imgprocSz, imgprocSz, CvType.CV_32F); 1645 1646 Imgproc.Scharr(src, dst, CvType.CV_32F, 1, 0, 1.5, 0.001); 1647 1648 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(0.001)); 1649 assertMatEqual(truth, dst, EPS); 1650 } 1651 1652 public void testScharrMatMatIntIntIntDoubleDoubleInt() { 1653 Mat src = Mat.eye(3, 3, CvType.CV_32F); 1654 1655 Imgproc.Scharr(src, dst, CvType.CV_32F, 1, 0, 1.5, 0, Core.BORDER_REFLECT); 1656 1657 truth = new Mat(3, 3, CvType.CV_32F) { 1658 { 1659 put(0, 0, -15, -19.5, -4.5); 1660 put(1, 0, 10.5, 0, -10.5); 1661 put(2, 0, 4.5, 19.5, 15); 1662 } 1663 }; 1664 assertMatEqual(truth, dst, EPS); 1665 } 1666 1667 public void testSepFilter2DMatMatIntMatMat() { 1668 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(2)); 1669 Mat kernelX = new Mat(1, 3, CvType.CV_32FC1); 1670 Mat kernelY = new Mat(1, 3, CvType.CV_32FC1); 1671 kernelX.put(0, 0, 4, 3, 7); 1672 kernelY.put(0, 0, 9, 4, 2); 1673 1674 Imgproc.sepFilter2D(src, dst, CvType.CV_32F, kernelX, kernelY); 1675 1676 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(420)); 1677 assertMatEqual(truth, dst, EPS); 1678 } 1679 1680 public void testSepFilter2DMatMatIntMatMatPointDouble() { 1681 Mat src = new Mat(imgprocSz, imgprocSz, CvType.CV_32FC1, new Scalar(2)); 1682 Mat kernelX = new Mat(1, 3, CvType.CV_32FC1); 1683 kernelX.put(0, 0, 2, 2, 2); 1684 Mat kernelY = new Mat(1, 3, CvType.CV_32FC1); 1685 kernelY.put(0, 0, 1, 1, 1); 1686 1687 Imgproc.sepFilter2D(src, dst, CvType.CV_32F, kernelX, kernelY, anchorPoint, weakEPS); 1688 1689 truth = new Mat(imgprocSz, imgprocSz, CvType.CV_32F, new Scalar(36 + weakEPS)); 1690 assertMatEqual(truth, dst, EPS); 1691 } 1692 1693 public void testSepFilter2DMatMatIntMatMatPointDoubleInt() { 1694 Mat kernelX = new Mat(1, 3, CvType.CV_32FC1); 1695 kernelX.put(0, 0, 2, 2, 2); 1696 1697 Mat kernelY = new Mat(1, 3, CvType.CV_32FC1); 1698 kernelY.put(0, 0, 1, 1, 1); 1699 1700 Imgproc.sepFilter2D(gray0, dst, CvType.CV_32F, kernelX, kernelY, anchorPoint, weakEPS, Core.BORDER_REFLECT); 1701 1702 truth = new Mat(10, 10, CvType.CV_32F, new Scalar(weakEPS)); 1703 assertMatEqual(truth, dst, EPS); 1704 // TODO_: write better test 1705 } 1706 1707 public void testSobelMatMatIntIntInt() { 1708 Imgproc.Sobel(gray255, dst, CvType.CV_8U, 1, 0); 1709 1710 assertMatEqual(gray0, dst); 1711 } 1712 1713 public void testSobelMatMatIntIntIntIntDoubleDouble() { 1714 Imgproc.Sobel(gray255, dst, CvType.CV_8U, 1, 0, 3, 2, 0.001); 1715 assertMatEqual(gray0, dst); 1716 // TODO_: write better test 1717 } 1718 1719 public void testSobelMatMatIntIntIntIntDoubleDoubleInt() { 1720 Mat src = new Mat(3, 3, CvType.CV_32F) { 1721 { 1722 put(0, 0, 2, 0, 1); 1723 put(1, 0, 6, 4, 3); 1724 put(2, 0, 1, 0, 2); 1725 } 1726 }; 1727 1728 Imgproc.Sobel(src, dst, CvType.CV_32F, 1, 0, 3, 2, 0, Core.BORDER_REPLICATE); 1729 1730 truth = new Mat(3, 3, CvType.CV_32F) { 1731 { 1732 put(0, 0, -16, -12, 4); 1733 put(1, 0, -14, -12, 2); 1734 put(2, 0, -10, 0, 10); 1735 } 1736 }; 1737 assertMatEqual(truth, dst, EPS); 1738 } 1739 1740 public void testThreshold() { 1741 Imgproc.threshold(makeMask(gray0.clone(), 10), dst, 5, 255, Imgproc.THRESH_TRUNC); 1742 assertMatEqual(makeMask(gray0.clone(), 5), dst); 1743 1744 Imgproc.threshold(makeMask(gray2.clone(), 10), dst, 1, 255, Imgproc.THRESH_BINARY); 1745 assertMatEqual(gray255, dst); 1746 1747 Imgproc.threshold(makeMask(gray2.clone(), 10), dst, 3, 255, Imgproc.THRESH_BINARY_INV); 1748 assertMatEqual(makeMask(gray255.clone(), 0), dst); 1749 } 1750 1751 public void testUndistortMatMatMatMat() { 1752 Mat src = new Mat(3, 3, CvType.CV_32F, new Scalar(3)); 1753 Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F) { 1754 { 1755 put(0, 0, 1, 0, 1); 1756 put(1, 0, 0, 1, 2); 1757 put(2, 0, 0, 0, 1); 1758 } 1759 }; 1760 Mat distCoeffs = new Mat(1, 4, CvType.CV_32F) { 1761 { 1762 put(0, 0, 1, 3, 2, 4); 1763 } 1764 }; 1765 1766 Imgproc.undistort(src, dst, cameraMatrix, distCoeffs); 1767 1768 truth = new Mat(3, 3, CvType.CV_32F) { 1769 { 1770 put(0, 0, 0, 0, 0); 1771 put(1, 0, 0, 0, 0); 1772 put(2, 0, 0, 3, 0); 1773 } 1774 }; 1775 assertMatEqual(truth, dst, EPS); 1776 } 1777 1778 public void testUndistortMatMatMatMatMat() { 1779 Mat src = new Mat(3, 3, CvType.CV_32F, new Scalar(3)); 1780 Mat cameraMatrix = new Mat(3, 3, CvType.CV_32F) { 1781 { 1782 put(0, 0, 1, 0, 1); 1783 put(1, 0, 0, 1, 2); 1784 put(2, 0, 0, 0, 1); 1785 } 1786 }; 1787 Mat distCoeffs = new Mat(1, 4, CvType.CV_32F) { 1788 { 1789 put(0, 0, 2, 1, 4, 5); 1790 } 1791 }; 1792 Mat newCameraMatrix = new Mat(3, 3, CvType.CV_32F, new Scalar(1)); 1793 1794 Imgproc.undistort(src, dst, cameraMatrix, distCoeffs, newCameraMatrix); 1795 1796 truth = new Mat(3, 3, CvType.CV_32F, new Scalar(3)); 1797 assertMatEqual(truth, dst, EPS); 1798 } 1799 1800 //undistortPoints(List<Point> src, List<Point> dst, Mat cameraMatrix, Mat distCoeffs) 1801 public void testUndistortPointsListOfPointListOfPointMatMat() { 1802 MatOfPoint2f src = new MatOfPoint2f(new Point(1, 2), new Point(3, 4), new Point(-1, -1)); 1803 MatOfPoint2f dst = new MatOfPoint2f(); 1804 Mat cameraMatrix = Mat.eye(3, 3, CvType.CV_64FC1); 1805 Mat distCoeffs = new Mat(8, 1, CvType.CV_64FC1, new Scalar(0)); 1806 1807 Imgproc.undistortPoints(src, dst, cameraMatrix, distCoeffs); 1808 1809 assertEquals(src.size(), dst.size()); 1810 for(int i=0; i<src.toList().size(); i++) { 1811 //Log.d("UndistortPoints", "s="+src.get(i)+", d="+dst.get(i)); 1812 assertTrue(src.toList().get(i).equals(dst.toList().get(i))); 1813 } 1814 } 1815 1816 1817 public void testWarpAffineMatMatMatSize() { 1818 Mat src = new Mat(3, 3, CvType.CV_32F) { 1819 { 1820 put(0, 0, 2, 0, 1); 1821 put(1, 0, 6, 4, 3); 1822 put(2, 0, 1, 0, 2); 1823 } 1824 }; 1825 Mat M = new Mat(2, 3, CvType.CV_32F) { 1826 { 1827 put(0, 0, 1, 0, 1); 1828 put(1, 0, 0, 1, 1); 1829 } 1830 }; 1831 1832 Imgproc.warpAffine(src, dst, M, new Size(3, 3)); 1833 1834 truth = new Mat(3, 3, CvType.CV_32F) { 1835 { 1836 put(0, 0, 0, 0, 0); 1837 put(1, 0, 0, 2, 0); 1838 put(2, 0, 0, 6, 4); 1839 } 1840 }; 1841 assertMatEqual(truth, dst, EPS); 1842 } 1843 1844 public void testWarpAffineMatMatMatSizeInt() { 1845 Mat src = new Mat(3, 3, CvType.CV_32F) { 1846 { 1847 put(0, 0, 2, 4, 1); 1848 put(1, 0, 6, 4, 3); 1849 put(2, 0, 0, 2, 2); 1850 } 1851 }; 1852 Mat M = new Mat(2, 3, CvType.CV_32F) { 1853 { 1854 put(0, 0, 1, 0, 0); 1855 put(1, 0, 0, 0, 1); 1856 } 1857 }; 1858 1859 Imgproc.warpAffine(src, dst, M, new Size(2, 2), Imgproc.WARP_INVERSE_MAP); 1860 1861 truth = new Mat(2, 2, CvType.CV_32F) { 1862 { 1863 put(0, 0, 6, 4); 1864 put(1, 0, 6, 4); 1865 } 1866 }; 1867 assertMatEqual(truth, dst, EPS); 1868 } 1869 1870 public void testWarpAffineMatMatMatSizeIntInt() { 1871 fail("Not yet implemented"); 1872 } 1873 1874 public void testWarpAffineMatMatMatSizeIntIntScalar() { 1875 fail("Not yet implemented"); 1876 } 1877 1878 public void testWarpPerspectiveMatMatMatSize() { 1879 Mat src = new Mat(3, 3, CvType.CV_32F) { 1880 { 1881 put(0, 0, 2, 4, 1); 1882 put(1, 0, 0, 4, 5); 1883 put(2, 0, 1, 2, 2); 1884 } 1885 }; 1886 Mat M = new Mat(3, 3, CvType.CV_32F) { 1887 { 1888 put(0, 0, 1, 0, 1); 1889 put(1, 0, 0, 1, 1); 1890 put(2, 0, 0, 0, 1); 1891 } 1892 }; 1893 1894 Imgproc.warpPerspective(src, dst, M, new Size(3, 3)); 1895 1896 truth = new Mat(3, 3, CvType.CV_32F) { 1897 { 1898 put(0, 0, 0, 0, 0); 1899 put(1, 0, 0, 2, 4); 1900 put(2, 0, 0, 0, 4); 1901 } 1902 }; 1903 assertMatEqual(truth, dst, EPS); 1904 } 1905 1906 public void testWarpPerspectiveMatMatMatSizeInt() { 1907 fail("Not yet implemented"); 1908 } 1909 1910 public void testWarpPerspectiveMatMatMatSizeIntInt() { 1911 fail("Not yet implemented"); 1912 } 1913 1914 public void testWarpPerspectiveMatMatMatSizeIntIntScalar() { 1915 fail("Not yet implemented"); 1916 } 1917 1918 public void testWatershed() { 1919 Mat image = Mat.eye(4, 4, CvType.CV_8UC(3)); 1920 Mat markers = new Mat(4, 4, CvType.CV_32SC1, new Scalar(0)); 1921 1922 Imgproc.watershed(image, markers); 1923 1924 truth = new Mat(4, 4, CvType.CV_32SC1) { 1925 { 1926 put(0, 0, -1, -1, -1, -1); 1927 put(1, 0, -1, 0, 0, -1); 1928 put(2, 0, -1, 0, 0, -1); 1929 put(3, 0, -1, -1, -1, -1); 1930 } 1931 }; 1932 assertMatEqual(truth, markers); 1933 } 1934 1935 public void testGetTextSize() { 1936 String text = "Android all the way"; 1937 double fontScale = 2; 1938 int thickness = 3; 1939 int baseLine[] = new int[1]; 1940 1941 Imgproc.getTextSize(text, Core.FONT_HERSHEY_SCRIPT_SIMPLEX, fontScale, thickness, null); 1942 Size res = Imgproc.getTextSize(text, Core.FONT_HERSHEY_SCRIPT_SIMPLEX, fontScale, thickness, baseLine); 1943 1944 assertEquals(543.0, res.width); 1945 assertEquals(44.0, res.height); 1946 assertEquals(20, baseLine[0]); 1947 } 1948 1949 public void testCircleMatPointIntScalar() { 1950 Point center = new Point(gray0.cols() / 2, gray0.rows() / 2); 1951 int radius = Math.min(gray0.cols() / 4, gray0.rows() / 4); 1952 Scalar color = new Scalar(128); 1953 1954 Imgproc.circle(gray0, center, radius, color); 1955 1956 assertTrue(0 != Core.countNonZero(gray0)); 1957 } 1958 1959 public void testCircleMatPointIntScalarInt() { 1960 Point center = new Point(gray0.cols() / 2, gray0.rows() / 2); 1961 int radius = Math.min(gray0.cols() / 4, gray0.rows() / 4); 1962 Scalar color = new Scalar(128); 1963 1964 Imgproc.circle(gray0, center, radius, color, Core.FILLED); 1965 1966 assertTrue(0 != Core.countNonZero(gray0)); 1967 } 1968 1969 public void testCircleMatPointIntScalarIntIntInt() { 1970 Point center = new Point(gray0.cols() / 2, gray0.rows() / 2); 1971 Point center2 = new Point(gray0.cols(), gray0.rows()); 1972 int radius = Math.min(gray0.cols() / 4, gray0.rows() / 4); 1973 Scalar color128 = new Scalar(128); 1974 Scalar color0 = new Scalar(0); 1975 1976 Imgproc.circle(gray0, center2, radius * 2, color128, 2, Imgproc.LINE_4, 1/* 1977 * Number 1978 * of 1979 * fractional 1980 * bits 1981 */); 1982 assertFalse(0 == Core.countNonZero(gray0)); 1983 1984 Imgproc.circle(gray0, center, radius, color0, 2, Imgproc.LINE_4, 0); 1985 1986 assertTrue(0 == Core.countNonZero(gray0)); 1987 } 1988 1989 public void testClipLine() { 1990 Rect r = new Rect(10, 10, 10, 10); 1991 Point pt1 = new Point(5.0, 15.0); 1992 Point pt2 = new Point(25.0, 15.0); 1993 1994 assertTrue(Imgproc.clipLine(r, pt1, pt2)); 1995 1996 Point pt1Clipped = new Point(10.0, 15.0); 1997 Point pt2Clipped = new Point(19.0, 15.0); 1998 assertEquals(pt1Clipped, pt1); 1999 assertEquals(pt2Clipped, pt2); 2000 2001 pt1 = new Point(5.0, 5.0); 2002 pt2 = new Point(25.0, 5.0); 2003 pt1Clipped = new Point(5.0, 5.0); 2004 pt2Clipped = new Point(25.0, 5.0); 2005 2006 assertFalse(Imgproc.clipLine(r, pt1, pt2)); 2007 2008 assertEquals(pt1Clipped, pt1); 2009 assertEquals(pt2Clipped, pt2); 2010 } 2011 2012 public void testEllipse2Poly() { 2013 Point center = new Point(4, 4); 2014 Size axes = new Size(2, 2); 2015 int angle = 30; 2016 int arcStart = 30; 2017 int arcEnd = 60; 2018 int delta = 2; 2019 MatOfPoint pts = new MatOfPoint(); 2020 2021 Imgproc.ellipse2Poly(center, axes, angle, arcStart, arcEnd, delta, pts); 2022 2023 Point truth[] = { 2024 new Point(5, 6), 2025 new Point(4, 6) 2026 }; 2027 assertArrayPointsEquals(truth, pts.toArray(), EPS); 2028 } 2029 2030 public void testEllipseMatPointSizeDoubleDoubleDoubleScalar() { 2031 Point center = new Point(gray0.cols() / 2, gray0.rows() / 2); 2032 Size axes = new Size(2, 2); 2033 double angle = 30, startAngle = 60, endAngle = 90; 2034 2035 Imgproc.ellipse(gray0, center, axes, angle, startAngle, endAngle, colorWhite); 2036 2037 assertTrue(0 != Core.countNonZero(gray0)); 2038 } 2039 2040 public void testEllipseMatPointSizeDoubleDoubleDoubleScalarInt() { 2041 Point center = new Point(gray0.cols() / 2, gray0.rows() / 2); 2042 Size axes = new Size(2, 2); 2043 double angle = 30, startAngle = 60, endAngle = 90; 2044 2045 Imgproc.ellipse(gray0, center, axes, angle, startAngle, endAngle, colorWhite, Core.FILLED); 2046 2047 assertTrue(0 != Core.countNonZero(gray0)); 2048 } 2049 2050 public void testEllipseMatPointSizeDoubleDoubleDoubleScalarIntIntInt() { 2051 Point center = new Point(gray0.cols() / 2, gray0.rows() / 2); 2052 Size axes = new Size(2, 2); 2053 Point center2 = new Point(gray0.cols(), gray0.rows()); 2054 Size axes2 = new Size(4, 4); 2055 double angle = 30, startAngle = 0, endAngle = 30; 2056 2057 Imgproc.ellipse(gray0, center, axes, angle, startAngle, endAngle, colorWhite, Core.FILLED, Imgproc.LINE_4, 0); 2058 2059 assertTrue(0 != Core.countNonZero(gray0)); 2060 2061 Imgproc.ellipse(gray0, center2, axes2, angle, startAngle, endAngle, colorBlack, Core.FILLED, Imgproc.LINE_4, 1); 2062 2063 assertEquals(0, Core.countNonZero(gray0)); 2064 } 2065 2066 public void testEllipseMatRotatedRectScalar() { 2067 int matSize = 10; 2068 Mat gray0 = Mat.zeros(matSize, matSize, CvType.CV_8U); 2069 Point center = new Point(matSize / 2, matSize / 2); 2070 Size size = new Size(matSize / 4, matSize / 2); 2071 RotatedRect box = new RotatedRect(center, size, 45); 2072 2073 Imgproc.ellipse(gray0, box, new Scalar(1)); 2074 2075 final byte[] truth = new byte[] { 2076 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2077 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2078 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2079 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2080 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 2081 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2082 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 2083 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2084 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2085 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 2086 2087 assertMatEqual(new Mat(matSize, matSize, CvType.CV_8U) { 2088 { 2089 put(0, 0, truth); 2090 } 2091 }, gray0); 2092 } 2093 2094 public void testEllipseMatRotatedRectScalarInt() { 2095 Point center = new Point(matSize / 2, matSize / 2); 2096 Size size = new Size(matSize / 4, matSize / 2); 2097 RotatedRect box = new RotatedRect(center, size, 45); 2098 2099 Imgproc.ellipse(gray0, box, new Scalar(1), Core.FILLED); 2100 Imgproc.ellipse(gray0, box, new Scalar(0)); 2101 2102 assertTrue(0 < Core.countNonZero(gray0)); 2103 } 2104 2105 public void testEllipseMatRotatedRectScalarIntInt() { 2106 Point center = new Point(matSize / 2, matSize / 2); 2107 Size size = new Size(2, matSize * 2 / 3); 2108 RotatedRect box = new RotatedRect(center, size, 20); 2109 2110 Imgproc.ellipse(gray0, box, new Scalar(9), 1, Imgproc.LINE_AA); 2111 Imgproc.ellipse(gray0, box, new Scalar(0), 1, Imgproc.LINE_4); 2112 2113 assertTrue(0 < Core.countNonZero(gray0)); 2114 } 2115 2116 public void testPolylinesMatListOfListOfPointBooleanScalar() { 2117 Mat img = gray0; 2118 List<MatOfPoint> polyline = new ArrayList<MatOfPoint>(); 2119 polyline.add(new MatOfPoint(new Point(1, 1), new Point(7, 1), new Point(7, 6), new Point(1, 6))); 2120 2121 Imgproc.polylines(img, polyline, true, new Scalar(100)); 2122 2123 assertEquals(22, Core.countNonZero(img)); 2124 2125 Imgproc.polylines(img, polyline, false, new Scalar(0)); 2126 2127 assertEquals(4, Core.countNonZero(img)); 2128 } 2129 2130 public void testPolylinesMatListOfListOfPointBooleanScalarInt() { 2131 Mat img = gray0; 2132 List<MatOfPoint> polyline = new ArrayList<MatOfPoint>(); 2133 polyline.add(new MatOfPoint(new Point(1, 1), new Point(7, 1), new Point(7, 6), new Point(1, 6))); 2134 2135 Imgproc.polylines(img, polyline, true, new Scalar(100), 2); 2136 2137 assertEquals(62, Core.countNonZero(img)); 2138 } 2139 2140 public void testPolylinesMatListOfListOfPointBooleanScalarIntIntInt() { 2141 Mat img = gray0; 2142 List<MatOfPoint> polyline1 = new ArrayList<MatOfPoint>(); 2143 polyline1.add(new MatOfPoint(new Point(1, 1), new Point(7, 1), new Point(7, 6), new Point(1, 6))); 2144 List<MatOfPoint> polyline2 = new ArrayList<MatOfPoint>(); 2145 polyline2.add(new MatOfPoint(new Point(2, 2), new Point(14, 2), new Point(14, 12), new Point(2, 12))); 2146 2147 Imgproc.polylines(img, polyline1, true, new Scalar(100), 2, Imgproc.LINE_8, 0); 2148 2149 assertTrue(Core.countNonZero(img) > 0); 2150 2151 Imgproc.polylines(img, polyline2, true, new Scalar(0), 2, Imgproc.LINE_8, 1); 2152 2153 assertEquals(0, Core.countNonZero(img)); 2154 } 2155 2156 public void testPutTextMatStringPointIntDoubleScalar() { 2157 String text = "Hello World"; 2158 Size labelSize = new Size(175, 22); 2159 Mat img = new Mat(20 + (int) labelSize.height, 20 + (int) labelSize.width, CvType.CV_8U, colorBlack); 2160 Point origin = new Point(10, labelSize.height + 10); 2161 2162 Imgproc.putText(img, text, origin, Core.FONT_HERSHEY_SIMPLEX, 1.0, colorWhite); 2163 2164 assertTrue(Core.countNonZero(img) > 0); 2165 // check that border is not corrupted 2166 Imgproc.rectangle(img, new Point(11, 11), new Point(labelSize.width + 10, labelSize.height + 10), colorBlack, Core.FILLED); 2167 assertEquals(0, Core.countNonZero(img)); 2168 } 2169 2170 public void testPutTextMatStringPointIntDoubleScalarInt() { 2171 String text = "Hello World"; 2172 Size labelSize = new Size(176, 22); 2173 Mat img = new Mat(20 + (int) labelSize.height, 20 + (int) labelSize.width, CvType.CV_8U, colorBlack); 2174 Point origin = new Point(10, labelSize.height + 10); 2175 2176 Imgproc.putText(img, text, origin, Core.FONT_HERSHEY_SIMPLEX, 1.0, colorWhite, 2); 2177 2178 assertTrue(Core.countNonZero(img) > 0); 2179 // check that border is not corrupted 2180 Imgproc.rectangle(img, new Point(10, 10), new Point(labelSize.width + 10 + 1, labelSize.height + 10 + 1), colorBlack, Core.FILLED); 2181 assertEquals(0, Core.countNonZero(img)); 2182 } 2183 2184 public void testPutTextMatStringPointIntDoubleScalarIntIntBoolean() { 2185 String text = "Hello World"; 2186 Size labelSize = new Size(175, 22); 2187 2188 Mat img = new Mat(20 + (int) labelSize.height, 20 + (int) labelSize.width, CvType.CV_8U, colorBlack); 2189 Point origin = new Point(10, 10); 2190 2191 Imgproc.putText(img, text, origin, Core.FONT_HERSHEY_SIMPLEX, 1.0, colorWhite, 1, Imgproc.LINE_8, true); 2192 2193 assertTrue(Core.countNonZero(img) > 0); 2194 // check that border is not corrupted 2195 Imgproc.rectangle(img, new Point(10, 10), new Point(labelSize.width + 9, labelSize.height + 9), colorBlack, Core.FILLED); 2196 assertEquals(0, Core.countNonZero(img)); 2197 } 2198 } 2199