Path: blob/master/modules/core/misc/java/test/MatTest.java
16354 views
package org.opencv.test.core;12import java.util.Arrays;3import java.nio.ByteBuffer;45import org.opencv.core.Core;6import org.opencv.core.CvException;7import org.opencv.core.CvType;8import org.opencv.core.Mat;9import org.opencv.core.Point;10import org.opencv.core.Range;11import org.opencv.core.Rect;12import org.opencv.core.Scalar;13import org.opencv.core.Size;14import org.opencv.test.OpenCVTestCase;1516public class MatTest extends OpenCVTestCase {1718public void testAdjustROI() {19Mat roi = gray0.submat(3, 5, 7, 10);20Mat originalroi = roi.clone();2122Mat adjusted = roi.adjustROI(2, 2, 2, 2);2324assertMatEqual(adjusted, roi);25assertSizeEquals(new Size(5, 6), adjusted.size(), EPS);26assertEquals(originalroi.type(), adjusted.type());27assertTrue(adjusted.isSubmatrix());28assertFalse(adjusted.isContinuous());2930Point offset = new Point();31Size size = new Size();32adjusted.locateROI(size, offset);33assertPointEquals(new Point(5, 1), offset, EPS);34assertSizeEquals(gray0.size(), size, EPS);35}3637public void testAssignToMat() {38gray0.assignTo(dst);3940assertMatEqual(gray0, dst);4142gray255.assignTo(dst);4344assertMatEqual(gray255, dst);45}4647public void testAssignToMatInt() {48gray255.assignTo(dst, CvType.CV_32F);4950assertMatEqual(gray255_32f, dst, EPS);51}5253public void testChannels() {54assertEquals(1, gray0.channels());55assertEquals(3, rgbLena.channels());56assertEquals(4, rgba0.channels());57}5859public void testCheckVectorInt() {60// ! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel61// (1 x N) or (N x 1); negative number otherwise62assertEquals(2, new Mat(2, 10, CvType.CV_8U).checkVector(10));63assertEquals(2, new Mat(1, 2, CvType.CV_8UC(10)).checkVector(10));64assertEquals(2, new Mat(2, 1, CvType.CV_8UC(10)).checkVector(10));65assertEquals(10, new Mat(1, 10, CvType.CV_8UC2).checkVector(2));6667assertTrue(0 > new Mat().checkVector(0));68assertTrue(0 > new Mat(10, 1, CvType.CV_8U).checkVector(10));69assertTrue(0 > new Mat(10, 20, CvType.CV_8U).checkVector(10));70}7172public void testCheckVectorIntInt() {73assertEquals(2, new Mat(2, 10, CvType.CV_8U).checkVector(10, CvType.CV_8U));74assertEquals(2, new Mat(1, 2, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8U));75assertEquals(2, new Mat(2, 1, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8U));76assertEquals(10, new Mat(1, 10, CvType.CV_8UC2).checkVector(2, CvType.CV_8U));7778assertTrue(0 > new Mat(2, 10, CvType.CV_8U).checkVector(10, CvType.CV_8S));79assertTrue(0 > new Mat(1, 2, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8S));80assertTrue(0 > new Mat(2, 1, CvType.CV_8UC(10)).checkVector(10, CvType.CV_8S));81assertTrue(0 > new Mat(1, 10, CvType.CV_8UC2).checkVector(10, CvType.CV_8S));82}8384public void testCheckVectorIntIntBoolean() {85Mat mm = new Mat(5, 1, CvType.CV_8UC(10));86Mat roi = new Mat(5, 3, CvType.CV_8UC(10)).submat(1, 3, 2, 3);8788assertEquals(5, mm.checkVector(10, CvType.CV_8U, true));89assertEquals(5, mm.checkVector(10, CvType.CV_8U, false));90assertEquals(2, roi.checkVector(10, CvType.CV_8U, false));91assertTrue(0 > roi.checkVector(10, CvType.CV_8U, true));92}9394public void testClone() {95dst = gray0.clone();96assertMatEqual(gray0, dst);97assertFalse(gray0.getNativeObjAddr() == dst.getNativeObjAddr());98assertFalse(gray0.dataAddr() == dst.dataAddr());99}100101public void testCol() {102Mat col = gray0.col(0);103assertEquals(1, col.cols());104assertEquals(gray0.rows(), col.rows());105}106107public void testColRangeIntInt() {108Mat cols = gray0.colRange(0, gray0.cols() / 2);109110assertEquals(gray0.cols() / 2, cols.cols());111assertEquals(gray0.rows(), cols.rows());112}113114public void testColRangeRange() {115Range range = new Range(0, 5);116dst = gray0.colRange(range);117118truth = new Mat(10, 5, CvType.CV_8UC1, new Scalar(0.0));119assertMatEqual(truth, dst);120}121122public void testCols() {123assertEquals(matSize, gray0.cols());124}125126public void testConvertToMatInt() {127gray255.convertTo(dst, CvType.CV_32F);128129truth = new Mat(matSize, matSize, CvType.CV_32F, new Scalar(255));130assertMatEqual(truth, dst, EPS);131}132133public void testConvertToMatIntDouble() {134gray2.convertTo(dst, CvType.CV_16U, 2.0);135136truth = new Mat(matSize, matSize, CvType.CV_16U, new Scalar(4));137assertMatEqual(truth, dst);138}139140public void testConvertToMatIntDoubleDouble() {141gray0_32f.convertTo(dst, CvType.CV_8U, 2.0, 4.0);142143truth = new Mat(matSize, matSize, CvType.CV_8U, new Scalar(4));144assertMatEqual(truth, dst);145}146147public void testCopyToMat() {148rgbLena.copyTo(dst);149assertMatEqual(rgbLena, dst);150}151152public void testCopyToMatMat() {153Mat src = new Mat(4, 4, CvType.CV_8U, new Scalar(5));154Mat mask = makeMask(src.clone());155156src.copyTo(dst, mask);157158truth = new Mat(4, 4, CvType.CV_8U) {159{160put(0, 0, 0, 0, 5, 5);161put(1, 0, 0, 0, 5, 5);162put(2, 0, 0, 0, 5, 5);163put(3, 0, 0, 0, 5, 5);164}165};166assertMatEqual(truth, dst);167168}169170public void testCreateIntIntInt() {171gray255.create(4, 5, CvType.CV_32F);172173assertEquals(4, gray255.rows());174assertEquals(5, gray255.cols());175assertEquals(CvType.CV_32F, gray255.type());176}177178public void testCreateSizeInt() {179Size size = new Size(5, 5);180dst.create(size, CvType.CV_16U);181182assertEquals(5, dst.rows());183assertEquals(5, dst.cols());184assertEquals(CvType.CV_16U, dst.type());185}186187public void testCross() {188Mat answer = new Mat(1, 3, CvType.CV_32F);189answer.put(0, 0, 7.0, 1.0, -5.0);190191Mat cross = v1.cross(v2);192assertMatEqual(answer, cross, EPS);193}194195public void testDataAddr() {196assertTrue(0 != gray0.dataAddr());197assertEquals(0, new Mat().dataAddr());198}199200public void testDepth() {201assertEquals(CvType.CV_8U, gray0.depth());202assertEquals(CvType.CV_32F, gray0_32f.depth());203}204205public void testDiag() {206dst = gray0.diag();207208truth = new Mat(10, 1, CvType.CV_8UC1, new Scalar(0));209assertMatEqual(truth, dst);210}211212public void testDiagInt() {213dst = gray255.diag(2);214215truth = new Mat(8, 1, CvType.CV_8UC1, new Scalar(255));216assertMatEqual(truth, dst);217}218219public void testDiagMat() {220Mat diagVector = new Mat(matSize, 1, CvType.CV_32F, new Scalar(1));221222dst = Mat.diag(diagVector);223224assertMatEqual(grayE_32f, dst, EPS);225}226227public void testDiagMat_sqrMatrix() {228try {229dst = Mat.diag(gray255);230} catch (CvException e) {231// expected232}233}234235public void testDot() {236double s = v1.dot(v2);237assertEquals(11.0, s);238}239240public void testDump() {241assertEquals("[1, 3, 2]", v1.dump());242}243244public void testElemSize() {245assertEquals(Byte.SIZE / 8 * gray0.channels(), gray0.elemSize());246assertEquals(Float.SIZE / 8 * gray0_32f.channels(), gray0_32f.elemSize());247assertEquals(Byte.SIZE / 8 * rgbLena.channels(), rgbLena.elemSize());248}249250public void testElemSize1() {251assertEquals(Byte.SIZE / 8, gray255.elemSize1());252assertEquals(Double.SIZE / 8, gray0_64f.elemSize1());253assertEquals(Byte.SIZE / 8, rgbLena.elemSize1());254}255256public void testEmpty() {257assertTrue(dst.empty());258assertTrue(!gray0.empty());259}260261public void testEyeIntIntInt() {262Mat eye = Mat.eye(3, 3, CvType.CV_32FC1);263264assertMatEqual(eye, eye.inv(), EPS);265}266267public void testEyeSizeInt() {268Size size = new Size(5, 5);269270Mat eye = Mat.eye(size, CvType.CV_32S);271272assertEquals(5, Core.countNonZero(eye));273274}275276public Mat getTestMat(int size, int type) {277Mat m = new Mat(size, size, type);278final int ch = CvType.channels(type);279double buff[] = new double[size*size * ch];280for(int i=0; i<size; i++)281for(int j=0; j<size; j++)282for(int k=0; k<ch; k++) {283buff[i*size*ch + j*ch + k] = 100*i + 10*j + k;284}285m.put(0, 0, buff);286return m;287}288289public void testGetIntInt_8U() {290Mat m = getTestMat(5, CvType.CV_8UC2);291292// whole Mat293assertTrue(Arrays.equals(new double[] {0, 1}, m.get(0, 0)));294assertTrue(Arrays.equals(new double[] {240, 241}, m.get(2, 4)));295assertTrue(Arrays.equals(new double[] {255, 255}, m.get(4, 4)));296297// sub-Mat298Mat sm = m.submat(2, 4, 3, 5);299assertTrue(Arrays.equals(new double[] {230, 231}, sm.get(0, 0)));300assertTrue(Arrays.equals(new double[] {255, 255}, sm.get(1, 1)));301}302303public void testGetIntInt_32S() {304Mat m = getTestMat(5, CvType.CV_32SC3);305306// whole Mat307assertTrue(Arrays.equals(new double[] {0, 1, 2}, m.get(0, 0)));308assertTrue(Arrays.equals(new double[] {240, 241, 242}, m.get(2, 4)));309assertTrue(Arrays.equals(new double[] {440, 441, 442}, m.get(4, 4)));310311// sub-Mat312Mat sm = m.submat(2, 4, 3, 5);313assertTrue(Arrays.equals(new double[] {230, 231, 232}, sm.get(0, 0)));314assertTrue(Arrays.equals(new double[] {340, 341, 342}, sm.get(1, 1)));315}316317public void testGetIntInt_64F() {318Mat m = getTestMat(5, CvType.CV_64FC1);319320// whole Mat321assertTrue(Arrays.equals(new double[] {0}, m.get(0, 0)));322assertTrue(Arrays.equals(new double[] {240}, m.get(2, 4)));323assertTrue(Arrays.equals(new double[] {440}, m.get(4, 4)));324325// sub-Mat326Mat sm = m.submat(2, 4, 3, 5);327assertTrue(Arrays.equals(new double[] {230}, sm.get(0, 0)));328assertTrue(Arrays.equals(new double[] {340}, sm.get(1, 1)));329}330331public void testGetIntIntByteArray() {332Mat m = getTestMat(5, CvType.CV_8UC3);333byte[] goodData = new byte[9];334byte[] badData = new byte[7];335336// whole Mat337int bytesNum = m.get(1, 1, goodData);338339assertEquals(9, bytesNum);340assertTrue(Arrays.equals(new byte[] { 110, 111, 112, 120, 121, 122, (byte) 130, (byte) 131, (byte) 132 }, goodData));341342try {343m.get(2, 2, badData);344fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");345} catch (UnsupportedOperationException e) {346// expected347}348349// sub-Mat350Mat sm = m.submat(2, 4, 3, 5);351byte buff00[] = new byte[3];352bytesNum = sm.get(0, 0, buff00);353assertEquals(3, bytesNum);354assertTrue(Arrays.equals(new byte[] {(byte) 230, (byte) 231, (byte) 232}, buff00));355byte buff11[] = new byte[3];356bytesNum = sm.get(1, 1, buff11);357assertEquals(3, bytesNum);358assertTrue(Arrays.equals(new byte[] {(byte) 255, (byte) 255, (byte) 255}, buff11));359}360361public void testGetIntIntDoubleArray() {362Mat m = getTestMat(5, CvType.CV_64F);363double buff[] = new double[4];364365// whole Mat366int bytesNum = m.get(1, 1, buff);367368assertEquals(32, bytesNum);369assertTrue(Arrays.equals(new double[] { 110, 120, 130, 140 }, buff));370371// sub-Mat372Mat sm = m.submat(2, 4, 3, 5);373double buff00[] = new double[2];374bytesNum = sm.get(0, 0, buff00);375assertEquals(16, bytesNum);376assertTrue(Arrays.equals(new double[] {230, 240}, buff00));377double buff11[] = new double[] {0, 0};378bytesNum = sm.get(1, 1, buff11);379assertEquals(8, bytesNum);380assertTrue(Arrays.equals(new double[] {340, 0}, buff11));381}382383public void testGetIntIntFloatArray() {384Mat m = getTestMat(5, CvType.CV_32F);385float buff[] = new float[4];386387// whole Mat388int bytesNum = m.get(1, 1, buff);389390assertEquals(16, bytesNum);391assertTrue(Arrays.equals(new float[] { 110, 120, 130, 140 }, buff));392393// sub-Mat394Mat sm = m.submat(2, 4, 3, 5);395float buff00[] = new float[2];396bytesNum = sm.get(0, 0, buff00);397assertEquals(8, bytesNum);398assertTrue(Arrays.equals(new float[] {230, 240}, buff00));399float buff11[] = new float[] {0, 0};400bytesNum = sm.get(1, 1, buff11);401assertEquals(4, bytesNum);402assertTrue(Arrays.equals(new float[] {340, 0}, buff11));403}404405public void testGetIntIntIntArray() {406Mat m = getTestMat(5, CvType.CV_32SC2);407int[] buff = new int[6];408409// whole Mat410int bytesNum = m.get(1, 1, buff);411412assertEquals(24, bytesNum);413assertTrue(Arrays.equals(new int[] { 110, 111, 120, 121, 130, 131 }, buff));414415// sub-Mat416Mat sm = m.submat(2, 4, 3, 5);417int buff00[] = new int[4];418bytesNum = sm.get(0, 0, buff00);419assertEquals(16, bytesNum);420assertTrue(Arrays.equals(new int[] {230, 231, 240, 241}, buff00));421int buff11[] = new int[]{0, 0, 0, 0};422bytesNum = sm.get(1, 1, buff11);423assertEquals(8, bytesNum);424assertTrue(Arrays.equals(new int[] {340, 341, 0, 0}, buff11));425}426427public void testGetIntIntShortArray() {428Mat m = getTestMat(5, CvType.CV_16SC2);429short[] buff = new short[6];430431// whole Mat432int bytesNum = m.get(1, 1, buff);433434assertEquals(12, bytesNum);435assertTrue(Arrays.equals(new short[] { 110, 111, 120, 121, 130, 131 }, buff));436437// sub-Mat438Mat sm = m.submat(2, 4, 3, 5);439short buff00[] = new short[4];440bytesNum = sm.get(0, 0, buff00);441assertEquals(8, bytesNum);442assertTrue(Arrays.equals(new short[] {230, 231, 240, 241}, buff00));443short buff11[] = new short[]{0, 0, 0, 0};444bytesNum = sm.get(1, 1, buff11);445assertEquals(4, bytesNum);446assertTrue(Arrays.equals(new short[] {340, 341, 0, 0}, buff11));447}448449public void testGetNativeObjAddr() {450assertTrue(0 != gray0.getNativeObjAddr());451}452453public void testHeight() {454assertEquals(gray0.rows(), gray0.height());455assertEquals(rgbLena.rows(), rgbLena.height());456assertEquals(rgba128.rows(), rgba128.height());457}458459public void testInv() {460dst = grayE_32f.inv();461assertMatEqual(grayE_32f, dst, EPS);462}463464public void testInvInt() {465Mat src = new Mat(2, 2, CvType.CV_32F) {466{467put(0, 0, 1.0);468put(0, 1, 2.0);469put(1, 0, 1.5);470put(1, 1, 4.0);471}472};473474dst = src.inv(Core.DECOMP_CHOLESKY);475476truth = new Mat(2, 2, CvType.CV_32F) {477{478put(0, 0, 4.0);479put(0, 1, -2.0);480put(1, 0, -1.5);481put(1, 1, 1.0);482}483};484485assertMatEqual(truth, dst, EPS);486}487488public void testIsContinuous() {489assertTrue(gray0.isContinuous());490491Mat subMat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2);492assertFalse(subMat.isContinuous());493}494495public void testIsSubmatrix() {496assertFalse(gray0.isSubmatrix());497Mat subMat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2);498assertTrue(subMat.isSubmatrix());499}500501public void testLocateROI() {502Mat roi = gray0.submat(3, 5, 7, 10);503Point offset = new Point();504Size size = new Size();505506roi.locateROI(size, offset);507508assertPointEquals(new Point(7, 3), offset, EPS);509assertSizeEquals(new Size(10, 10), size, EPS);510}511512public void testMat() {513Mat m = new Mat();514assertNotNull(m);515assertTrue(m.empty());516}517518public void testMatIntIntCvType() {519Mat gray = new Mat(1, 1, CvType.CV_8UC1);520assertFalse(gray.empty());521522Mat rgb = new Mat(1, 1, CvType.CV_8UC3);523assertFalse(rgb.empty());524}525526public void testMatIntIntCvTypeScalar() {527dst = new Mat(gray127.rows(), gray127.cols(), CvType.CV_8U, new Scalar(127));528assertFalse(dst.empty());529assertMatEqual(dst, gray127);530531dst = new Mat(rgba128.rows(), rgba128.cols(), CvType.CV_8UC4, Scalar.all(128));532assertFalse(dst.empty());533assertMatEqual(dst, rgba128);534}535536public void testMatIntIntInt() {537Mat gray = new Mat(1, 1, CvType.CV_8U);538assertFalse(gray.empty());539540Mat rgb = new Mat(1, 1, CvType.CV_8U);541assertFalse(rgb.empty());542}543544public void testMatIntIntIntScalar() {545Mat m1 = new Mat(gray127.rows(), gray127.cols(), CvType.CV_8U, new Scalar(127));546assertFalse(m1.empty());547assertMatEqual(m1, gray127);548549Mat m2 = new Mat(gray0_32f.rows(), gray0_32f.cols(), CvType.CV_32F, new Scalar(0));550assertFalse(m2.empty());551assertMatEqual(m2, gray0_32f, EPS);552}553554public void testMatMatRange() {555dst = new Mat(gray0, new Range(0, 5));556557truth = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));558assertFalse(dst.empty());559assertMatEqual(truth, dst);560}561562public void testMatMatRangeRange() {563dst = new Mat(gray255_32f, new Range(0, 5), new Range(0, 5));564565truth = new Mat(5, 5, CvType.CV_32FC1, new Scalar(255));566567assertFalse(dst.empty());568assertMatEqual(truth, dst, EPS);569}570571public void testMatMatRect() {572Mat m = new Mat(7, 6, CvType.CV_32SC1);573m.put(0, 0,5740, 1, 2, 3, 4, 5,57510, 11, 12, 13, 14, 15,57620, 21, 22, 23, 24, 25,57730, 31, 32, 33, 34, 35,57840, 41, 42, 43, 44, 45,57950, 51, 52, 53, 54, 55,58060, 61, 62, 63, 64, 65 );581582dst = new Mat(m, new Rect(1, 2, 3, 4));583584truth = new Mat(4, 3, CvType.CV_32SC1);585truth.put(0, 0,58621, 22, 23,58731, 32, 33,58841, 42, 43,58951, 52, 53 );590591assertFalse(dst.empty());592assertMatEqual(truth, dst);593}594595public void testMatSizeInt() {596dst = new Mat(new Size(10, 10), CvType.CV_8U);597598assertFalse(dst.empty());599}600601public void testMatSizeIntScalar() {602dst = new Mat(new Size(10, 10), CvType.CV_32F, new Scalar(255));603604assertFalse(dst.empty());605assertMatEqual(gray255_32f, dst, EPS);606}607608public void testMulMat() {609assertMatEqual(gray0, gray0.mul(gray255));610611Mat m1 = new Mat(2, 2, CvType.CV_32F, new Scalar(2));612Mat m2 = new Mat(2, 2, CvType.CV_32F, new Scalar(3));613614dst = m1.mul(m2);615616truth = new Mat(2, 2, CvType.CV_32F, new Scalar(6));617assertMatEqual(truth, dst, EPS);618619}620621public void testMulMatDouble() {622Mat m1 = new Mat(2, 2, CvType.CV_32F, new Scalar(2));623Mat m2 = new Mat(2, 2, CvType.CV_32F, new Scalar(3));624625dst = m1.mul(m2, 3.0);626627truth = new Mat(2, 2, CvType.CV_32F, new Scalar(18));628assertMatEqual(truth, dst, EPS);629}630631public void testOnesIntIntInt() {632dst = Mat.ones(matSize, matSize, CvType.CV_32F);633634truth = new Mat(matSize, matSize, CvType.CV_32F, new Scalar(1));635assertMatEqual(truth, dst, EPS);636}637638public void testOnesSizeInt() {639dst = Mat.ones(new Size(2, 2), CvType.CV_16S);640truth = new Mat(2, 2, CvType.CV_16S, new Scalar(1));641assertMatEqual(truth, dst);642}643644public void testPush_back() {645Mat m1 = new Mat(2, 4, CvType.CV_32F, new Scalar(2));646Mat m2 = new Mat(3, 4, CvType.CV_32F, new Scalar(3));647648m1.push_back(m2);649650truth = new Mat(5, 4, CvType.CV_32FC1) {651{652put(0, 0, 2, 2, 2, 2);653put(1, 0, 2, 2, 2, 2);654put(2, 0, 3, 3, 3, 3);655put(3, 0, 3, 3, 3, 3);656put(4, 0, 3, 3, 3, 3);657}658};659660assertMatEqual(truth, m1, EPS);661}662663public void testPutIntIntByteArray() {664Mat m = new Mat(5, 5, CvType.CV_8UC3, new Scalar(1, 2, 3));665Mat sm = m.submat(2, 4, 3, 5);666byte[] buff = new byte[] { 0, 0, 0, 0, 0, 0 };667byte[] buff0 = new byte[] { 10, 20, 30, 40, 50, 60 };668byte[] buff1 = new byte[] { -1, -2, -3, -4, -5, -6 };669670int bytesNum = m.put(1, 2, buff0);671672assertEquals(6, bytesNum);673bytesNum = m.get(1, 2, buff);674assertEquals(6, bytesNum);675assertTrue(Arrays.equals(buff, buff0));676677bytesNum = sm.put(0, 0, buff1);678679assertEquals(6, bytesNum);680bytesNum = sm.get(0, 0, buff);681assertEquals(6, bytesNum);682assertTrue(Arrays.equals(buff, buff1));683bytesNum = m.get(2, 3, buff);684assertEquals(6, bytesNum);685assertTrue(Arrays.equals(buff, buff1));686687Mat m1 = m.row(1);688bytesNum = m1.get(0, 2, buff);689assertEquals(6, bytesNum);690assertTrue(Arrays.equals(buff, buff0));691692try {693byte[] bytes2 = new byte[] { 10, 20, 30, 40, 50 };694m.put(2, 2, bytes2);695fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");696} catch (UnsupportedOperationException e) {697// expected698}699}700701public void testPutIntIntDoubleArray() {702Mat m = new Mat(5, 5, CvType.CV_8UC3, new Scalar(1, 2, 3));703Mat sm = m.submat(2, 4, 3, 5);704byte[] buff = new byte[] { 0, 0, 0, 0, 0, 0 };705706int bytesNum = m.put(1, 2, 10, 20, 30, 40, 50, 60);707708assertEquals(6, bytesNum);709bytesNum = m.get(1, 2, buff);710assertEquals(6, bytesNum);711assertTrue(Arrays.equals(buff, new byte[]{10, 20, 30, 40, 50, 60}));712713bytesNum = sm.put(0, 0, 255, 254, 253, 252, 251, 250);714715assertEquals(6, bytesNum);716bytesNum = sm.get(0, 0, buff);717assertEquals(6, bytesNum);718assertTrue(Arrays.equals(buff, new byte[]{-1, -2, -3, -4, -5, -6}));719bytesNum = m.get(2, 3, buff);720assertEquals(6, bytesNum);721assertTrue(Arrays.equals(buff, new byte[]{-1, -2, -3, -4, -5, -6}));722}723724public void testPutIntIntFloatArray() {725Mat m = new Mat(5, 5, CvType.CV_32FC3, new Scalar(1, 2, 3));726float[] elements = new float[] { 10, 20, 30, 40, 50, 60 };727728int bytesNum = m.put(4, 3, elements);729730assertEquals(elements.length * 4, bytesNum);731Mat m1 = m.row(4);732float buff[] = new float[3];733bytesNum = m1.get(0, 4, buff);734assertEquals(buff.length * 4, bytesNum);735assertTrue(Arrays.equals(new float[]{40, 50, 60}, buff));736assertArrayEquals(new double[]{10, 20, 30}, m.get(4, 3), EPS);737738try {739float[] elements2 = new float[] { 10, 20, 30, 40, 50 };740m.put(2, 2, elements2);741fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");742} catch (UnsupportedOperationException e) {743// expected744}745}746747public void testPutIntIntIntArray() {748Mat m = new Mat(5, 5, CvType.CV_32SC3, new Scalar(-1, -2, -3));749int[] elements = new int[] { 10, 20, 30, 40, 50, 60 };750751int bytesNum = m.put(0, 4, elements);752753assertEquals(elements.length * 4, bytesNum);754Mat m1 = m.col(4);755int buff[] = new int[3];756bytesNum = m1.get(0, 0, buff);757assertEquals(buff.length * 4, bytesNum);758assertTrue(Arrays.equals(new int[]{10, 20, 30}, buff));759assertArrayEquals(new double[]{40, 50, 60}, m.get(1, 0), EPS);760761try {762int[] elements2 = new int[] { 10, 20, 30, 40, 50 };763m.put(2, 2, elements2);764fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");765} catch (UnsupportedOperationException e) {766// expected767}768}769770public void testPutIntIntShortArray() {771Mat m = new Mat(5, 5, CvType.CV_16SC3, new Scalar(-1, -2, -3));772short[] elements = new short[] { 10, 20, 30, 40, 50, 60 };773774int bytesNum = m.put(2, 3, elements);775776assertEquals(elements.length * 2, bytesNum);777Mat m1 = m.col(3);778short buff[] = new short[3];779bytesNum = m1.get(2, 0, buff);780assertTrue(Arrays.equals(new short[]{10, 20, 30}, buff));781assertArrayEquals(new double[]{40, 50, 60}, m.get(2, 4), EPS);782783try {784short[] elements2 = new short[] { 10, 20, 30, 40, 50 };785m.put(2, 2, elements2);786fail("Expected UnsupportedOperationException (data.length % CvType.channels(t) != 0)");787} catch (UnsupportedOperationException e) {788// expected789}790}791792public void testRelease() {793assertFalse(gray0.empty());794assertTrue(gray0.rows() > 0);795796gray0.release();797798assertTrue(gray0.empty());799assertEquals(0, gray0.rows());800assertEquals(0, gray0.dataAddr());801}802803public void testReshapeInt() {804Mat src = new Mat(4, 4, CvType.CV_8U, new Scalar(0));805dst = src.reshape(4);806807truth = new Mat(4, 1, CvType.CV_8UC4, new Scalar(0));808assertMatEqual(truth, dst);809}810811public void testReshapeIntInt() {812Mat src = new Mat(5, 7, CvType.CV_8U, new Scalar(0));813dst = src.reshape(7, 5);814815truth = new Mat(5, 1, CvType.CV_8UC(7), new Scalar(0));816assertMatEqual(truth, dst);817}818819public void testRow() {820Mat row = gray0.row(0);821assertEquals(1, row.rows());822assertEquals(gray0.cols(), row.cols());823}824825public void testRowRangeIntInt() {826Mat rows = gray0.rowRange(0, gray0.rows() / 2);827assertEquals(gray0.rows() / 2, rows.rows());828assertEquals(gray0.cols(), rows.cols());829}830831public void testRowRangeRange() {832Mat rows = gray255.rowRange(new Range(0, 5));833834assertEquals(gray255.rows() / 2, rows.rows());835assertEquals(gray255.cols(), rows.cols());836}837838public void testRows() {839assertEquals(matSize, gray0.rows());840}841842public void testSetToMat() {843Mat vals = new Mat(7, 1, CvType.CV_8U) {844{845put(0, 0, 1, 2, 3, 4, 5, 6, 7);846}847};848Mat dst = new Mat(1, 1, CvType.CV_8UC(7));849850dst.setTo(vals);851852Mat truth = new Mat(1, 1, CvType.CV_8UC(7)) {853{854put(0, 0, 1, 2, 3, 4, 5, 6, 7);855}856};857assertMatEqual(truth, dst);858}859860public void testSetToMatMat() {861Mat vals = new Mat(7, 1, CvType.CV_8U) {862{863put(0, 0, 1, 2, 3, 4, 5, 6, 7);864}865};866Mat dst = Mat.zeros(2, 1, CvType.CV_8UC(7));867Mat mask = new Mat(2, 1, CvType.CV_8U) {868{869put(0, 0, 0, 1);870}871};872873dst.setTo(vals, mask);874875Mat truth = new Mat(2, 1, CvType.CV_8UC(7)) {876{877put(0, 0, 0, 0, 0, 0, 0, 0, 0);878put(1, 0, 1, 2, 3, 4, 5, 6, 7);879}880};881assertMatEqual(truth, dst);882}883884public void testSetToScalar() {885gray0.setTo(new Scalar(127));886assertMatEqual(gray127, gray0);887}888889public void testSetToScalarMask() {890Mat mask = gray0.clone();891mask.put(1, 1, 1, 2, 3);892gray0.setTo(new Scalar(1), mask);893assertEquals(3, Core.countNonZero(gray0));894Core.subtract(gray0, mask, gray0);895assertEquals(0, Core.countNonZero(gray0));896}897898public void testSize() {899assertEquals(new Size(matSize, matSize), gray0.size());900901assertEquals(new Size(3, 1), v1.size());902}903904public void testStep1() {905assertEquals(matSize * CvType.channels(CvType.CV_8U), gray0.step1());906907assertEquals(3, v2.step1());908}909910public void testStep1Int() {911Mat roi = rgba0.submat(3, 5, 7, 10);912Mat m = roi.clone();913914assertTrue(rgba0.channels() * rgba0.cols() <= roi.step1(0));915assertEquals(rgba0.channels(), roi.step1(1));916assertTrue(m.channels() * (10 - 7) <= m.step1(0));917assertEquals(m.channels(), m.step1(1));918}919920public void testSubmatIntIntIntInt() {921Mat submat = gray0.submat(0, gray0.rows() / 2, 0, gray0.cols() / 2);922923assertTrue(submat.isSubmatrix());924assertFalse(submat.isContinuous());925assertEquals(gray0.rows() / 2, submat.rows());926assertEquals(gray0.cols() / 2, submat.cols());927}928929public void testSubmatRangeRange() {930Mat submat = gray255.submat(new Range(2, 4), new Range(2, 4));931assertTrue(submat.isSubmatrix());932assertFalse(submat.isContinuous());933934assertEquals(2, submat.rows());935assertEquals(2, submat.cols());936}937938public void testSubmatRect() {939Mat submat = gray255.submat(new Rect(5, 5, gray255.cols() / 2, gray255.rows() / 2));940assertTrue(submat.isSubmatrix());941assertFalse(submat.isContinuous());942943assertEquals(gray255.rows() / 2, submat.rows());944assertEquals(gray255.cols() / 2, submat.cols());945}946947public void testT() {948assertMatEqual(gray255, gray255.t());949950Mat src = new Mat(3, 3, CvType.CV_16U) {951{952put(0, 0, 1, 2, 4);953put(1, 0, 7, 5, 0);954put(2, 0, 3, 4, 6);955}956};957958dst = src.t();959960truth = new Mat(3, 3, CvType.CV_16U) {961{962put(0, 0, 1, 7, 3);963put(1, 0, 2, 5, 4);964put(2, 0, 4, 0, 6);965}966};967assertMatEqual(truth, dst);968}969970public void testToString() {971assertTrue(null != gray0.toString());972}973974public void testTotal() {975int nElements = gray0.rows() * gray0.cols();976assertEquals(nElements, gray0.total());977}978979public void testType() {980assertEquals(CvType.CV_8UC1, gray0.type());981assertEquals(CvType.CV_32FC1, gray0_32f.type());982assertEquals(CvType.CV_8UC3, rgbLena.type());983}984985public void testWidth() {986assertEquals(gray0.cols(), gray0.width());987assertEquals(rgbLena.cols(), rgbLena.width());988assertEquals(rgba128.cols(), rgba128.width());989}990991public void testZerosIntIntInt() {992dst = Mat.zeros(matSize, matSize, CvType.CV_32F);993994assertMatEqual(gray0_32f, dst, EPS);995}996997public void testZerosSizeInt() {998dst = Mat.zeros(new Size(2, 2), CvType.CV_16S);9991000truth = new Mat(2, 2, CvType.CV_16S, new Scalar(0));1001assertMatEqual(truth, dst);1002}10031004public void testMatFromByteBuffer() {1005ByteBuffer bbuf = ByteBuffer.allocateDirect(64*64);1006bbuf.putInt(0x01010101);1007Mat m = new Mat(64,64,CvType.CV_8UC1,bbuf);1008assertEquals(4, Core.countNonZero(m));1009Core.add(m, new Scalar(1), m);1010assertEquals(4096, Core.countNonZero(m));1011m.release();1012assertEquals(2, bbuf.get(0));1013assertEquals(1, bbuf.get(4095));1014}10151016}101710181019