Commit 11dbd86a authored by Giles Payne's avatar Giles Payne Committed by Alexander Alekhin

Merge pull request #13956 from komakai:java-mat-class-improvements

* Expose more C++ functionality in the Java wrapper of the Mat class
In particular expose methods for handling Mat with more than 2 dimensions
* add constructors taking an array of dimension sizes
* add constructor taking an existing Mat and an array of Ranges
* add override of the create method taking an array of dimension sizes
* add overrides of the ones and zeros methods taking an array of dimension sizes
* add override of the submat method taking an array of ranges
* add overrides of put and get taking arrays of indices
* add wrapper for copySize method
* fix crash in the JNI wrapper of the reshape(int cn, int[] newshape) method
* add test for each method added to Mat.java

* Fix broken test
parent 7e8cc580
This diff is collapsed.
This diff is collapsed.
...@@ -99,6 +99,8 @@ public class OpenCVTestCase extends TestCase { ...@@ -99,6 +99,8 @@ public class OpenCVTestCase extends TestCase {
protected Mat rgbLena; protected Mat rgbLena;
protected Mat grayChess; protected Mat grayChess;
protected Mat gray255_32f_3d;
protected Mat v1; protected Mat v1;
protected Mat v2; protected Mat v2;
...@@ -149,6 +151,8 @@ public class OpenCVTestCase extends TestCase { ...@@ -149,6 +151,8 @@ public class OpenCVTestCase extends TestCase {
rgbLena = Imgcodecs.imread(OpenCVTestRunner.LENA_PATH); rgbLena = Imgcodecs.imread(OpenCVTestRunner.LENA_PATH);
grayChess = Imgcodecs.imread(OpenCVTestRunner.CHESS_PATH, 0); grayChess = Imgcodecs.imread(OpenCVTestRunner.CHESS_PATH, 0);
gray255_32f_3d = new Mat(new int[]{matSize, matSize, matSize}, CvType.CV_32F, new Scalar(255.0));
v1 = new Mat(1, 3, CvType.CV_32F); v1 = new Mat(1, 3, CvType.CV_32F);
v1.put(0, 0, 1.0, 3.0, 2.0); v1.put(0, 0, 1.0, 3.0, 2.0);
v2 = new Mat(1, 3, CvType.CV_32F); v2 = new Mat(1, 3, CvType.CV_32F);
...@@ -184,6 +188,7 @@ public class OpenCVTestCase extends TestCase { ...@@ -184,6 +188,7 @@ public class OpenCVTestCase extends TestCase {
rgba128.release(); rgba128.release();
rgbLena.release(); rgbLena.release();
grayChess.release(); grayChess.release();
gray255_32f_3d.release();
v1.release(); v1.release();
v2.release(); v2.release();
...@@ -442,8 +447,24 @@ public class OpenCVTestCase extends TestCase { ...@@ -442,8 +447,24 @@ public class OpenCVTestCase extends TestCase {
assertEquals(msg, expected.z, actual.z, eps); assertEquals(msg, expected.z, actual.z, eps);
} }
static private boolean dimensionsEqual(Mat expected, Mat actual) {
if (expected.dims() != actual.dims()) {
return false;
}
if (expected.dims() > 2) {
for (int i = 0; i < expected.dims(); i++) {
if (expected.size(i) != actual.size(i)) {
return false;
}
}
return true;
} else {
return expected.cols() == actual.cols() && expected.rows() == actual.rows();
}
}
static private void compareMats(Mat expected, Mat actual, boolean isEqualityMeasured) { static private void compareMats(Mat expected, Mat actual, boolean isEqualityMeasured) {
if (expected.type() != actual.type() || expected.cols() != actual.cols() || expected.rows() != actual.rows()) { if (expected.type() != actual.type() || !dimensionsEqual(expected, actual)) {
throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual); throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual);
} }
...@@ -471,7 +492,7 @@ public class OpenCVTestCase extends TestCase { ...@@ -471,7 +492,7 @@ public class OpenCVTestCase extends TestCase {
} }
static private void compareMats(Mat expected, Mat actual, double eps, boolean isEqualityMeasured) { static private void compareMats(Mat expected, Mat actual, double eps, boolean isEqualityMeasured) {
if (expected.type() != actual.type() || expected.cols() != actual.cols() || expected.rows() != actual.rows()) { if (expected.type() != actual.type() || !dimensionsEqual(expected, actual)) {
throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual); throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual);
} }
......
...@@ -97,6 +97,8 @@ public class OpenCVTestCase extends TestCase { ...@@ -97,6 +97,8 @@ public class OpenCVTestCase extends TestCase {
protected Mat rgbLena; protected Mat rgbLena;
protected Mat grayChess; protected Mat grayChess;
protected Mat gray255_32f_3d;
protected Mat v1; protected Mat v1;
protected Mat v2; protected Mat v2;
...@@ -175,6 +177,8 @@ public class OpenCVTestCase extends TestCase { ...@@ -175,6 +177,8 @@ public class OpenCVTestCase extends TestCase {
rgbLena = Imgcodecs.imread(OpenCVTestRunner.LENA_PATH); rgbLena = Imgcodecs.imread(OpenCVTestRunner.LENA_PATH);
grayChess = Imgcodecs.imread(OpenCVTestRunner.CHESS_PATH, 0); grayChess = Imgcodecs.imread(OpenCVTestRunner.CHESS_PATH, 0);
gray255_32f_3d = new Mat(new int[]{matSize, matSize, matSize}, CvType.CV_32F, new Scalar(255.0));
v1 = new Mat(1, 3, CvType.CV_32F); v1 = new Mat(1, 3, CvType.CV_32F);
v1.put(0, 0, 1.0, 3.0, 2.0); v1.put(0, 0, 1.0, 3.0, 2.0);
v2 = new Mat(1, 3, CvType.CV_32F); v2 = new Mat(1, 3, CvType.CV_32F);
...@@ -210,6 +214,7 @@ public class OpenCVTestCase extends TestCase { ...@@ -210,6 +214,7 @@ public class OpenCVTestCase extends TestCase {
rgba128.release(); rgba128.release();
rgbLena.release(); rgbLena.release();
grayChess.release(); grayChess.release();
gray255_32f_3d.release();
v1.release(); v1.release();
v2.release(); v2.release();
...@@ -468,8 +473,24 @@ public class OpenCVTestCase extends TestCase { ...@@ -468,8 +473,24 @@ public class OpenCVTestCase extends TestCase {
assertEquals(msg, expected.z, actual.z, eps); assertEquals(msg, expected.z, actual.z, eps);
} }
static private boolean dimensionsEqual(Mat expected, Mat actual) {
if (expected.dims() != actual.dims()) {
return false;
}
if (expected.dims() > 2) {
for (int i = 0; i < expected.dims(); i++) {
if (expected.size(i) != actual.size(i)) {
return false;
}
}
return true;
} else {
return expected.cols() == actual.cols() && expected.rows() == actual.rows();
}
}
static private void compareMats(Mat expected, Mat actual, boolean isEqualityMeasured) { static private void compareMats(Mat expected, Mat actual, boolean isEqualityMeasured) {
if (expected.type() != actual.type() || expected.cols() != actual.cols() || expected.rows() != actual.rows()) { if (expected.type() != actual.type() || !dimensionsEqual(expected, actual)) {
throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual); throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual);
} }
...@@ -497,7 +518,7 @@ public class OpenCVTestCase extends TestCase { ...@@ -497,7 +518,7 @@ public class OpenCVTestCase extends TestCase {
} }
static private void compareMats(Mat expected, Mat actual, double eps, boolean isEqualityMeasured) { static private void compareMats(Mat expected, Mat actual, double eps, boolean isEqualityMeasured) {
if (expected.type() != actual.type() || expected.cols() != actual.cols() || expected.rows() != actual.rows()) { if (expected.type() != actual.type() || !dimensionsEqual(expected, actual)) {
throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual); throw new UnsupportedOperationException("Can not compare " + expected + " and " + actual);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment