From 0e7732fa5ba67b38f45c6caf1910180008b05a7d Mon Sep 17 00:00:00 2001 From: rainyl Date: Fri, 12 Apr 2024 21:40:47 +0800 Subject: [PATCH] API change: Mat.fromScalar --- .editorconfig | 9 +++++ README.md | 1 + bin/setup_commands.dart | 2 ++ lib/src/calib3d/calib3d.dart | 10 +++--- lib/src/contrib/aruco.dart | 36 ++++++++++++------- lib/src/contrib/aruco_dict.dart | 3 +- lib/src/contrib/img_hash.dart | 9 +++-- lib/src/core/core.dart | 18 ++++++---- lib/src/core/exception.dart | 2 ++ lib/src/core/keypoint.dart | 3 +- lib/src/core/mat.dart | 40 ++++++++++++--------- lib/src/core/point.dart | 3 +- lib/src/core/rng.dart | 5 +-- lib/src/core/scalar.dart | 3 +- lib/src/core/vec.dart | 9 +++-- lib/src/dnn/dnn.dart | 12 ++++--- lib/src/features2d/features2d.dart | 22 +++++++----- lib/src/highgui/highgui.dart | 12 ++++--- lib/src/imgproc/clahe.dart | 9 ++--- lib/src/imgproc/imgproc.dart | 56 +++++++++++++++++++----------- lib/src/objdetect/objdetect.dart | 13 ++++--- lib/src/photo/photo.dart | 6 ++-- lib/src/utils/bytesio.dart | 1 + lib/src/video/video.dart | 6 ++-- lib/src/video/videoio.dart | 7 ++-- test/aruco_test.dart | 4 +-- test/calib3d_test.dart | 3 +- test/core/core_test.dart | 26 ++++++++------ test/core/mat_test.dart | 48 +++++++++++++++---------- test/core/point_test.dart | 14 ++++++-- test/core/vec_test.dart | 4 +-- test/dnn_test.dart | 4 +-- test/highgui_test.dart | 3 +- test/imgproc_test.dart | 15 +++++--- test/perf_mat.dart | 5 ++- test/svd_test.dart | 10 ++++-- test/video_test.dart | 6 ++-- 37 files changed, 286 insertions(+), 153 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..828a00dc --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_style = space # "space"、"tab" +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +max_line_length = 100 diff --git a/README.md b/README.md index ca3480ad..1b45445d 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ OpenCV Bindings for Dart Language.

Star on Github +https://pub.dev/packages/opencv_dart License: Apache-2.0

diff --git a/bin/setup_commands.dart b/bin/setup_commands.dart index 49991f4b..e9bd856a 100644 --- a/bin/setup_commands.dart +++ b/bin/setup_commands.dart @@ -1,3 +1,5 @@ +// ignore_for_file: avoid_print + import 'dart:convert'; import 'dart:io'; diff --git a/lib/src/calib3d/calib3d.dart b/lib/src/calib3d/calib3d.dart index 164becb7..98a473ca 100644 --- a/lib/src/calib3d/calib3d.dart +++ b/lib/src/calib3d/calib3d.dart @@ -57,7 +57,8 @@ class Fisheye { R ??= Mat.empty(); P ??= Mat.empty(); undistorted ??= Mat.empty(); - cvRun(() => CFFI.Fisheye_UndistortPoints(distorted.ref, undistorted!.ref, K.ref, D.ref, R!.ref, P!.ref)); + cvRun(() => CFFI.Fisheye_UndistortPoints( + distorted.ref, undistorted!.ref, K.ref, D.ref, R!.ref, P!.ref)); return undistorted; } @@ -211,7 +212,8 @@ Mat undistort( }) { dst ??= Mat.empty(); newCameraMatrix ??= Mat.empty(); - cvRun(() => CFFI.Undistort(src.ref, dst!.ref, cameraMatrix.ref, distCoeffs.ref, newCameraMatrix!.ref)); + cvRun(() => + CFFI.Undistort(src.ref, dst!.ref, cameraMatrix.ref, distCoeffs.ref, newCameraMatrix!.ref)); return dst; } @@ -337,8 +339,8 @@ Mat drawChessboardCorners( bool patternWasFound, ) { return cvRunArena((arena) { - cvRun(() => - CFFI.DrawChessboardCorners(image.ref, patternSize.toSize(arena).ref, corners.ref, patternWasFound)); + cvRun(() => CFFI.DrawChessboardCorners( + image.ref, patternSize.toSize(arena).ref, corners.ref, patternWasFound)); return image; }); } diff --git a/lib/src/contrib/aruco.dart b/lib/src/contrib/aruco.dart index 4d36090b..df801f8c 100644 --- a/lib/src/contrib/aruco.dart +++ b/lib/src/contrib/aruco.dart @@ -37,7 +37,8 @@ class ArucoDetector extends CvStruct { /// /// For further details, please see: /// https://docs.opencv.org/master/d9/d6a/group__aruco.html#ga3bc50d61fe4db7bce8d26d56b5a6428a - (VecVecPoint2f corners, VecInt ids, VecVecPoint2f rejectedImgPoints) detectMarkers(InputArray image) { + (VecVecPoint2f corners, VecInt ids, VecVecPoint2f rejectedImgPoints) detectMarkers( + InputArray image) { return using<(VecVecPoint2f, VecInt, VecVecPoint2f)>((arena) { final pCorners = calloc(); final pRejected = calloc(); @@ -55,8 +56,10 @@ class ArucoDetector extends CvStruct { List get props => [ptr.address]; } -void arucoDrawDetectedMarkers(Mat img, VecVecPoint2f markerCorners, VecInt markerIds, Scalar borderColor) { - cvRun(() => CFFI.ArucoDrawDetectedMarkers(img.ref, markerCorners.ref, markerIds.ref, borderColor.ref)); +void arucoDrawDetectedMarkers( + Mat img, VecVecPoint2f markerCorners, VecInt markerIds, Scalar borderColor) { + cvRun(() => + CFFI.ArucoDrawDetectedMarkers(img.ref, markerCorners.ref, markerIds.ref, borderColor.ref)); } void arucoGenerateImageMarker( @@ -66,7 +69,8 @@ void arucoGenerateImageMarker( Mat img, int borderBits, ) { - cvRun(() => CFFI.ArucoGenerateImageMarker(dictionaryId.value, id, sidePixels, img.ref, borderBits)); + cvRun( + () => CFFI.ArucoGenerateImageMarker(dictionaryId.value, id, sidePixels, img.ref, borderBits)); } class ArucoDetectorParameters extends CvStruct { @@ -82,7 +86,8 @@ class ArucoDetectorParameters extends CvStruct { @override cvg.ArucoDetectorParameters get ref => ptr.ref; - static final finalizer = OcvFinalizer(CFFI.addresses.ArucoDetectorParameters_Close); + static final finalizer = + OcvFinalizer(CFFI.addresses.ArucoDetectorParameters_Close); int get adaptiveThreshWinSizeMin { return cvRunArena((arena) { @@ -180,7 +185,8 @@ class ArucoDetectorParameters extends CvStruct { }); } - set minDistanceToBorder(int value) => CFFI.ArucoDetectorParameters_SetMinDistanceToBorder(ref, value); + set minDistanceToBorder(int value) => + CFFI.ArucoDetectorParameters_SetMinDistanceToBorder(ref, value); double get minMarkerDistanceRate { return cvRunArena((arena) { @@ -201,7 +207,8 @@ class ArucoDetectorParameters extends CvStruct { }); } - set cornerRefinementMethod(int value) => CFFI.ArucoDetectorParameters_SetCornerRefinementMethod(ref, value); + set cornerRefinementMethod(int value) => + CFFI.ArucoDetectorParameters_SetCornerRefinementMethod(ref, value); int get cornerRefinementWinSize { return cvRunArena((arena) { @@ -297,7 +304,8 @@ class ArucoDetectorParameters extends CvStruct { }); } - set errorCorrectionRate(double value) => CFFI.ArucoDetectorParameters_SetErrorCorrectionRate(ref, value); + set errorCorrectionRate(double value) => + CFFI.ArucoDetectorParameters_SetErrorCorrectionRate(ref, value); double get aprilTagQuadDecimate { return cvRunArena((arena) { @@ -307,7 +315,8 @@ class ArucoDetectorParameters extends CvStruct { }); } - set aprilTagQuadDecimate(double value) => CFFI.ArucoDetectorParameters_SetAprilTagQuadDecimate(ref, value); + set aprilTagQuadDecimate(double value) => + CFFI.ArucoDetectorParameters_SetAprilTagQuadDecimate(ref, value); double get aprilTagQuadSigma { return cvRunArena((arena) { @@ -317,7 +326,8 @@ class ArucoDetectorParameters extends CvStruct { }); } - set aprilTagQuadSigma(double value) => CFFI.ArucoDetectorParameters_SetAprilTagQuadSigma(ref, value); + set aprilTagQuadSigma(double value) => + CFFI.ArucoDetectorParameters_SetAprilTagQuadSigma(ref, value); int get aprilTagMinClusterPixels { return cvRunArena((arena) { @@ -338,7 +348,8 @@ class ArucoDetectorParameters extends CvStruct { }); } - set aprilTagMaxNmaxima(int value) => CFFI.ArucoDetectorParameters_SetAprilTagMaxNmaxima(ref, value); + set aprilTagMaxNmaxima(int value) => + CFFI.ArucoDetectorParameters_SetAprilTagMaxNmaxima(ref, value); double get aprilTagCriticalRad { return cvRunArena((arena) { @@ -348,7 +359,8 @@ class ArucoDetectorParameters extends CvStruct { }); } - set aprilTagCriticalRad(double value) => CFFI.ArucoDetectorParameters_SetAprilTagCriticalRad(ref, value); + set aprilTagCriticalRad(double value) => + CFFI.ArucoDetectorParameters_SetAprilTagCriticalRad(ref, value); double get aprilTagMaxLineFitMse { return cvRunArena((arena) { diff --git a/lib/src/contrib/aruco_dict.dart b/lib/src/contrib/aruco_dict.dart index 9e0297e6..e0a564a3 100644 --- a/lib/src/contrib/aruco_dict.dart +++ b/lib/src/contrib/aruco_dict.dart @@ -93,7 +93,8 @@ class ArucoDictionary extends CvStruct { @override cvg.ArucoDictionary get ref => ptr.ref; - static final finalizer = OcvFinalizer(CFFI.addresses.ArucoDictionary_Close); + static final finalizer = + OcvFinalizer(CFFI.addresses.ArucoDictionary_Close); @override List get props => [ptr.address]; diff --git a/lib/src/contrib/img_hash.dart b/lib/src/contrib/img_hash.dart index 6a193739..340c6244 100644 --- a/lib/src/contrib/img_hash.dart +++ b/lib/src/contrib/img_hash.dart @@ -73,10 +73,12 @@ const int BLOCK_MEAN_HASH_MODE_1 = 1; /// BlockMeanHash is implementation of the BlockMeanHash algorithm. class BlockMeanHash extends CvStruct implements ImgHashBase { - BlockMeanHash._(cvg.BlockMeanHashPtr ptr, [this._mode = BLOCK_MEAN_HASH_MODE_0]) : super.fromPointer(ptr) { + BlockMeanHash._(cvg.BlockMeanHashPtr ptr, [this._mode = BLOCK_MEAN_HASH_MODE_0]) + : super.fromPointer(ptr) { finalizer.attach(this, ptr.cast()); } - static final finalizer = OcvFinalizer>(CFFI.addresses.BlockMeanHash_Close); + static final finalizer = + OcvFinalizer>(CFFI.addresses.BlockMeanHash_Close); factory BlockMeanHash({int mode = BLOCK_MEAN_HASH_MODE_0}) { final p = calloc(); @@ -223,7 +225,8 @@ class NewRadialVarianceHash implements ImgHashBase { double compare(InputArray hashOne, InputArray hashTwo) { return using((arena) { final p = arena(); - cvRun(() => CFFI.radialVarianceHashCompare(hashOne.ref, hashTwo.ref, sigma, numOfAngleLine, p)); + cvRun( + () => CFFI.radialVarianceHashCompare(hashOne.ref, hashTwo.ref, sigma, numOfAngleLine, p)); return p.value; }); } diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart index e6bc571e..4abe8a97 100644 --- a/lib/src/core/core.dart +++ b/lib/src/core/core.dart @@ -672,8 +672,8 @@ Mat insertChannel(InputArray src, InputOutputArray dst, int coi) { final rval = cvRunArena((arena) { final p = arena(); cvRun( - () => CFFI.KMeans( - data.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, attempts, flags, centers!.ref, p), + () => CFFI.KMeans(data.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, attempts, + flags, centers!.ref, p), ); return p.value; }); @@ -697,8 +697,8 @@ Mat insertChannel(InputArray src, InputOutputArray dst, int coi) { final rval = cvRunArena((arena) { final p = arena(); cvRun( - () => CFFI.KMeansPoints( - pts.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, attempts, flags, centers!.ref, p), + () => CFFI.KMeansPoints(pts.ref, K, bestLabels.ref, criteria.toTermCriteria(arena).ref, + attempts, flags, centers!.ref, p), ); return p.value; }); @@ -793,14 +793,20 @@ Mat min(InputArray src1, InputArray src2, {OutputArray? dst}) { /// /// For further details, please see: /// https://docs.opencv.org/trunk/d2/de8/group__core__array.html#gab473bf2eb6d14ff97e89b355dac20707 -(double minVal, double maxVal, Point minLoc, Point maxLoc) minMaxLoc(InputArray src, {InputArray? mask}) { +(double minVal, double maxVal, Point minLoc, Point maxLoc) minMaxLoc(InputArray src, + {InputArray? mask}) { return using<(double, double, Point, Point)>((arena) { final minValP = arena(); final maxValP = arena(); final minLocP = arena(); final maxLocP = arena(); cvRun(() => CFFI.Mat_MinMaxLoc(src.ref, minValP, maxValP, minLocP, maxLocP)); - return (minValP.value, maxValP.value, Point.fromNative(minLocP.ref), Point.fromNative(maxLocP.ref)); + return ( + minValP.value, + maxValP.value, + Point.fromNative(minLocP.ref), + Point.fromNative(maxLocP.ref) + ); }); } diff --git a/lib/src/core/exception.dart b/lib/src/core/exception.dart index ea95ecdb..a2f345fe 100644 --- a/lib/src/core/exception.dart +++ b/lib/src/core/exception.dart @@ -1,3 +1,5 @@ +// ignore_for_file: avoid_print + import 'dart:ffi' as ffi; import 'dart:io'; diff --git a/lib/src/core/keypoint.dart b/lib/src/core/keypoint.dart index 9bbe66ff..691af0dd 100644 --- a/lib/src/core/keypoint.dart +++ b/lib/src/core/keypoint.dart @@ -12,7 +12,8 @@ class KeyPoint extends CvStruct { KeyPoint._(ffi.Pointer ptr) : super.fromPointer(ptr) { finalizer.attach(this, ptr.cast()); } - factory KeyPoint(double x, double y, double size, double angle, double response, int octave, int classID) { + factory KeyPoint( + double x, double y, double size, double angle, double response, int octave, int classID) { final ptr = calloc() ..ref.x = x ..ref.y = y diff --git a/lib/src/core/mat.dart b/lib/src/core/mat.dart index c06ca883..77c60d04 100644 --- a/lib/src/core/mat.dart +++ b/lib/src/core/mat.dart @@ -68,7 +68,7 @@ class Mat extends CvStruct { return mat; } - factory Mat.fromScalar(Scalar s, MatType type, {int rows = 1, int cols = 1}) { + factory Mat.fromScalar(int rows, int cols, MatType type, Scalar s) { final p = calloc(); cvRun(() => CFFI.Mat_NewWithSizeFromScalar(s.ref, rows, cols, type.toInt32(), p)); final mat = Mat._(p); @@ -617,7 +617,8 @@ class Mat extends CvStruct { } Mat addU8(int val, {bool inplace = false}) { - assert(type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, "addU8() only for CV_8U"); + assert(type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, + "addU8() only for CV_8U"); if (inplace) { cvRun(() => CFFI.Mat_AddUChar(ref, val)); return this; @@ -629,7 +630,8 @@ class Mat extends CvStruct { } Mat addI8(int val, {bool inplace = false}) { - assert(type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, "addI8() only for CV_8S"); + assert(type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, + "addI8() only for CV_8S"); if (inplace) { cvRun(() => CFFI.Mat_AddSChar(ref, val)); return this; @@ -641,8 +643,8 @@ class Mat extends CvStruct { } Mat addI32(int val, {bool inplace = false}) { - assert( - type.depth == MatType.CV_32S && val >= CV_I32_MIN && val <= CV_I32_MAX, "addI32() only for CV_32S"); + assert(type.depth == MatType.CV_32S && val >= CV_I32_MIN && val <= CV_I32_MAX, + "addI32() only for CV_32S"); if (inplace) { cvRun(() => CFFI.Mat_AddI32(ref, val)); return this; @@ -719,8 +721,8 @@ class Mat extends CvStruct { } Mat subtractU8(int val, {bool inplace = false}) { - assert( - type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, "subtractU8() only for CV_8U"); + assert(type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, + "subtractU8() only for CV_8U"); if (inplace) { cvRun(() => CFFI.Mat_SubtractUChar(ref, val)); return this; @@ -732,8 +734,8 @@ class Mat extends CvStruct { } Mat subtractI8(int val, {bool inplace = false}) { - assert( - type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, "subtractI8() only for CV_8S"); + assert(type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, + "subtractI8() only for CV_8S"); if (inplace) { cvRun(() => CFFI.Mat_SubtractSChar(ref, val)); return this; @@ -823,8 +825,8 @@ class Mat extends CvStruct { } Mat multiplyU8(int val, {bool inplace = false}) { - assert( - type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, "multiplyU8() only for CV_8U"); + assert(type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, + "multiplyU8() only for CV_8U"); if (inplace) { cvRun(() => CFFI.Mat_MultiplyUChar(ref, val)); return this; @@ -836,8 +838,8 @@ class Mat extends CvStruct { } Mat multiplyI8(int val, {bool inplace = false}) { - assert( - type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, "multiplyI8() only for CV_8S"); + assert(type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, + "multiplyI8() only for CV_8S"); if (inplace) { cvRun(() => CFFI.Mat_MultiplySChar(ref, val)); return this; @@ -927,7 +929,8 @@ class Mat extends CvStruct { } Mat divideU8(int val, {bool inplace = false}) { - assert(type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, "divideU8() only for CV_8U"); + assert(type.depth == MatType.CV_8U && val >= CV_U8_MIN && val <= CV_U8_MAX, + "divideU8() only for CV_8U"); if (inplace) { cvRun(() => CFFI.Mat_DivideUChar(ref, val)); return this; @@ -939,7 +942,8 @@ class Mat extends CvStruct { } Mat divideI8(int val, {bool inplace = false}) { - assert(type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, "divideI8() only for CV_8S"); + assert(type.depth == MatType.CV_8S && val >= CV_I8_MIN && val <= CV_I8_MAX, + "divideI8() only for CV_8S"); if (inplace) { cvRun(() => CFFI.Mat_DivideSChar(ref, val)); return this; @@ -1075,7 +1079,8 @@ class Mat extends CvStruct { /// Calculates a square root of array elements. Mat sqrt() { - assert(type.depth == MatType.CV_32F || type.depth == MatType.CV_64F, "sqrt() only for CV_32F or CV_64F"); + assert(type.depth == MatType.CV_32F || type.depth == MatType.CV_64F, + "sqrt() only for CV_32F or CV_64F"); final p = calloc(); cvRun(() => CFFI.Mat_Sqrt(ref, p)); final dst = Mat._(p); @@ -1132,7 +1137,8 @@ class Mat extends CvStruct { /// ``` List>> toList3D() { assert(channels >= 2, "toList3D() only for channels >= 2, but this.channels=$channels"); - return List.generate(rows, (row) => List.generate(cols, (col) => at(row, col).val as List

)); + return List.generate( + rows, (row) => List.generate(cols, (col) => at(row, col).val as List

)); } /// Get the data pointer of the Mat, this getter will reture a view of native diff --git a/lib/src/core/point.dart b/lib/src/core/point.dart index a10dfc96..4f7f3e00 100644 --- a/lib/src/core/point.dart +++ b/lib/src/core/point.dart @@ -78,7 +78,8 @@ class Point3f extends CvStruct { @override cvg.Point3f get ref => ptr.ref; @override - String toString() => 'Point3f(${x.toStringAsFixed(3)}, ${y.toStringAsFixed(3)}, ${z.toStringAsFixed(3)})'; + String toString() => + 'Point3f(${x.toStringAsFixed(3)}, ${y.toStringAsFixed(3)}, ${z.toStringAsFixed(3)})'; @override List get props => [x, y, z]; } diff --git a/lib/src/core/rng.dart b/lib/src/core/rng.dart index 3b0167a1..dec5c0de 100644 --- a/lib/src/core/rng.dart +++ b/lib/src/core/rng.dart @@ -29,9 +29,10 @@ class Rng extends CvStruct { static final finalizer = OcvFinalizer(CFFI.addresses.Rng_Close); - /// Fills arrays with random numbers. + /// Fills arrays with random numbers. /// https://docs.opencv.org/4.x/d1/dd6/classcv_1_1RNG.html#ad26f2b09d9868cf108e84c9814aa682d - Mat fill(Mat mat, int distType, double a, double b, {bool saturateRange = false, bool inplace = false}) { + Mat fill(Mat mat, int distType, double a, double b, + {bool saturateRange = false, bool inplace = false}) { if (inplace) { cvRun(() => CFFI.RNG_Fill(ref, mat.ref, distType, a, b, saturateRange)); return mat; diff --git a/lib/src/core/scalar.dart b/lib/src/core/scalar.dart index abc11433..1dc94a72 100644 --- a/lib/src/core/scalar.dart +++ b/lib/src/core/scalar.dart @@ -45,7 +45,8 @@ class Scalar extends CvStruct { static final Scalar black = Scalar.fromRgb(0, 0, 0); static final Scalar white = Scalar.fromRgb(255, 255, 255); static final Scalar zeros = Scalar.fromRgb(0, 0, 0); - static final Scalar max = Scalar(double.maxFinite, double.maxFinite, double.maxFinite, double.maxFinite); + static final Scalar max = + Scalar(double.maxFinite, double.maxFinite, double.maxFinite, double.maxFinite); } extension RecordScalarExtension on (double val1, double val2, double val3, double val4) { diff --git a/lib/src/core/vec.dart b/lib/src/core/vec.dart index 1f3c60ef..16ac064f 100644 --- a/lib/src/core/vec.dart +++ b/lib/src/core/vec.dart @@ -44,7 +44,8 @@ class VecInt extends Vec implements CvStruct { finalizer.attach(this, ptr.cast()); } - factory VecInt([int length = 0, int value = 0]) => VecInt.fromList(List.generate(length, (i) => value)); + factory VecInt([int length = 0, int value = 0]) => + VecInt.fromList(List.generate(length, (i) => value)); factory VecInt.fromPointer(cvg.VecIntPtr ptr) => VecInt._(ptr); factory VecInt.fromVec(cvg.VecInt ptr) { final p = calloc(); @@ -107,7 +108,8 @@ class VecUChar extends Vec implements CvStruct { VecUChar._(this.ptr) { finalizer.attach(this, ptr.cast()); } - factory VecUChar([int length = 0, int value = 0]) => VecUChar.fromList(List.generate(length, (i) => value)); + factory VecUChar([int length = 0, int value = 0]) => + VecUChar.fromList(List.generate(length, (i) => value)); factory VecUChar.fromPointer(cvg.VecUCharPtr ptr) => VecUChar._(ptr); factory VecUChar.fromVec(cvg.VecUChar ptr) { final p = calloc(); @@ -173,7 +175,8 @@ class VecChar extends Vec implements CvStruct { VecChar._(this.ptr) { finalizer.attach(this, ptr.cast()); } - factory VecChar([int length = 0, int value = 0]) => VecChar.fromList(List.generate(length, (i) => value)); + factory VecChar([int length = 0, int value = 0]) => + VecChar.fromList(List.generate(length, (i) => value)); factory VecChar.fromPointer(cvg.VecCharPtr ptr) => VecChar._(ptr); factory VecChar.fromVec(cvg.VecChar ptr) { final p = calloc(); diff --git a/lib/src/dnn/dnn.dart b/lib/src/dnn/dnn.dart index 4a137621..5f479a22 100644 --- a/lib/src/dnn/dnn.dart +++ b/lib/src/dnn/dnn.dart @@ -167,7 +167,8 @@ class Net extends CvStruct { factory Net.fromOnnx(String path) { return using((arena) { final p = calloc(); - cvRun(() => CFFI.Net_ReadNetFromONNX(path.toNativeUtf8(allocator: arena).cast(), p)); + cvRun( + () => CFFI.Net_ReadNetFromONNX(path.toNativeUtf8(allocator: arena).cast(), p)); final net = Net._(p); return net; }); @@ -221,7 +222,8 @@ class Net extends CvStruct { factory Net.fromTFLite(String path) { return using((arena) { final p = calloc(); - cvRun(() => CFFI.Net_ReadNetFromTFLite(path.toNativeUtf8(allocator: arena).cast(), p)); + cvRun(() => + CFFI.Net_ReadNetFromTFLite(path.toNativeUtf8(allocator: arena).cast(), p)); final net = Net._(p); return net; }); @@ -328,13 +330,15 @@ class Net extends CvStruct { /// /// For further details, please see: /// https://docs.opencv.org/3.4/db/d30/classcv_1_1dnn_1_1Net.html#a7f767df11386d39374db49cd8df8f59e - void setPreferableBackend(int backendId) => cvRun(() => CFFI.Net_SetPreferableBackend(ref, backendId)); + void setPreferableBackend(int backendId) => + cvRun(() => CFFI.Net_SetPreferableBackend(ref, backendId)); /// SetPreferableTarget ask network to make computations on specific target device. /// /// For further details, please see: /// https://docs.opencv.org/3.4/db/d30/classcv_1_1dnn_1_1Net.html#a9dddbefbc7f3defbe3eeb5dc3d3483f4 - void setPreferableTarget(int targetId) => cvRun(() => CFFI.Net_SetPreferableTarget(ref, targetId)); + void setPreferableTarget(int targetId) => + cvRun(() => CFFI.Net_SetPreferableTarget(ref, targetId)); /// GetLayer returns pointer to layer with specified id from the network. /// diff --git a/lib/src/features2d/features2d.dart b/lib/src/features2d/features2d.dart index c5e1a49a..edac4431 100644 --- a/lib/src/features2d/features2d.dart +++ b/lib/src/features2d/features2d.dart @@ -194,7 +194,8 @@ class FastFeatureDetector extends CvStruct { FastFeatureDetectorType type = FastFeatureDetectorType.TYPE_9_16, }) { final p = calloc(); - cvRun(() => CFFI.FastFeatureDetector_CreateWithParams(threshold, nonmaxSuppression, type.value, p)); + cvRun(() => + CFFI.FastFeatureDetector_CreateWithParams(threshold, nonmaxSuppression, type.value, p)); return FastFeatureDetector._(p); } @@ -210,7 +211,8 @@ class FastFeatureDetector extends CvStruct { }); } - static final finalizer = OcvFinalizer(CFFI.addresses.FastFeatureDetector_Close); + static final finalizer = + OcvFinalizer(CFFI.addresses.FastFeatureDetector_Close); @override List get props => [ptr.address]; @@ -381,8 +383,8 @@ class ORB extends CvStruct { int fastThreshold = 20, }) { final p = calloc(); - cvRun(() => CFFI.ORB_CreateWithParams(nFeatures, scaleFactor, nLevels, edgeThreshold, firstLevel, WTA_K, - scoreType.value, patchSize, fastThreshold, p)); + cvRun(() => CFFI.ORB_CreateWithParams(nFeatures, scaleFactor, nLevels, edgeThreshold, + firstLevel, WTA_K, scoreType.value, patchSize, fastThreshold, p)); return ORB._(p); } @@ -421,7 +423,8 @@ class ORB extends CvStruct { } class SimpleBlobDetectorParams extends CvStruct { - SimpleBlobDetectorParams._(ffi.Pointer ptr) : super.fromPointer(ptr) { + SimpleBlobDetectorParams._(ffi.Pointer ptr) + : super.fromPointer(ptr) { finalizer.attach(this, ptr.cast()); } @@ -476,7 +479,8 @@ class SimpleBlobDetectorParams extends CvStruct { return SimpleBlobDetectorParams._(p); } - factory SimpleBlobDetectorParams.fromNative(cvg.SimpleBlobDetectorParams r) => SimpleBlobDetectorParams( + factory SimpleBlobDetectorParams.fromNative(cvg.SimpleBlobDetectorParams r) => + SimpleBlobDetectorParams( blobColor: r.blobColor, filterByArea: r.filterByArea, filterByCircularity: r.filterByCircularity, @@ -654,7 +658,8 @@ class SimpleBlobDetector extends CvStruct { }); } - static final finalizer = OcvFinalizer(CFFI.addresses.SimpleBlobDetector_Close); + static final finalizer = + OcvFinalizer(CFFI.addresses.SimpleBlobDetector_Close); @override List get props => [ptr.address]; @@ -744,7 +749,8 @@ class FlannBasedMatcher extends CvStruct { }); } - static final finalizer = OcvFinalizer(CFFI.addresses.FlannBasedMatcher_Close); + static final finalizer = + OcvFinalizer(CFFI.addresses.FlannBasedMatcher_Close); @override List get props => [ptr.address]; diff --git a/lib/src/highgui/highgui.dart b/lib/src/highgui/highgui.dart index 6a3eb2ab..6d3c48dd 100644 --- a/lib/src/highgui/highgui.dart +++ b/lib/src/highgui/highgui.dart @@ -43,7 +43,8 @@ class Window { double getWindowProperty(WindowPropertyFlags flag) { return cvRunArena((arena) { final result = arena(); - cvRun(() => CFFI.Window_GetProperty(name.toNativeUtf8(allocator: arena).cast(), flag.value, result)); + cvRun(() => + CFFI.Window_GetProperty(name.toNativeUtf8(allocator: arena).cast(), flag.value, result)); return result.value; }); } @@ -54,7 +55,8 @@ class Window { /// https://docs.opencv.org/master/d7/dfc/group__highgui.html#ga66e4a6db4d4e06148bcdfe0d70a5df27 void setWindowProperty(WindowPropertyFlags flag, double value) { cvRunArena((arena) { - cvRun(() => CFFI.Window_SetProperty(name.toNativeUtf8(allocator: arena).cast(), flag.value, value)); + cvRun(() => + CFFI.Window_SetProperty(name.toNativeUtf8(allocator: arena).cast(), flag.value, value)); }); } @@ -128,7 +130,8 @@ class Window { Rect selectROI(Mat img) { return cvRunArena((arena) { final result = arena(); - cvRun(() => CFFI.Window_SelectROI(name.toNativeUtf8(allocator: arena).cast(), img.ref, result)); + cvRun( + () => CFFI.Window_SelectROI(name.toNativeUtf8(allocator: arena).cast(), img.ref, result)); return Rect.fromNative(result.ref); }); } @@ -145,7 +148,8 @@ class Window { VecRect selectROIs(Mat img) { return cvRunArena((arena) { final result = arena(); - cvRun(() => CFFI.Window_SelectROIs(name.toNativeUtf8(allocator: arena).cast(), img.ref, result)); + cvRun(() => + CFFI.Window_SelectROIs(name.toNativeUtf8(allocator: arena).cast(), img.ref, result)); return VecRect.fromVec(result.ref); }); } diff --git a/lib/src/imgproc/clahe.dart b/lib/src/imgproc/clahe.dart index 2ffaf68d..3080086a 100644 --- a/lib/src/imgproc/clahe.dart +++ b/lib/src/imgproc/clahe.dart @@ -30,10 +30,11 @@ class CLAHE extends CvStruct { calloc.free(size); return CLAHE._(p); } -/// Apply CLAHE. -/// -/// For further details, please see: -/// https:///docs.opencv.org/master/d6/db6/classcv_1_1CLAHE.html#a4e92e0e427de21be8d1fae8dcd862c5e + + /// Apply CLAHE. + /// + /// For further details, please see: + /// https:///docs.opencv.org/master/d6/db6/classcv_1_1CLAHE.html#a4e92e0e427de21be8d1fae8dcd862c5e Mat apply(Mat src, {Mat? dst}) { dst ??= Mat.empty(); cvRun(() => CFFI.CLAHE_Apply(ref, src.ref, dst!.ref)); diff --git a/lib/src/imgproc/imgproc.dart b/lib/src/imgproc/imgproc.dart index 241f8c79..4f19771c 100644 --- a/lib/src/imgproc/imgproc.dart +++ b/lib/src/imgproc/imgproc.dart @@ -292,7 +292,8 @@ Mat erode( }) { dst ??= Mat.empty(); labels ??= Mat.empty(); - cvRun(() => CFFI.DistanceTransform(src.ref, dst!.ref, labels!.ref, distanceType, maskSize, labelType)); + cvRun(() => + CFFI.DistanceTransform(src.ref, dst!.ref, labels!.ref, distanceType, maskSize, labelType)); return (dst, labels); } @@ -564,7 +565,8 @@ Mat gaussianBlur( }) { dst ??= Mat.empty(); cvRunArena((arena) { - cvRun(() => CFFI.GaussianBlur(src.ref, dst!.ref, ksize.toSize(arena).ref, sigmaX, sigmaY, borderType)); + cvRun(() => + CFFI.GaussianBlur(src.ref, dst!.ref, ksize.toSize(arena).ref, sigmaX, sigmaY, borderType)); }); return dst; } @@ -586,7 +588,11 @@ Mat getGaussianKernel(int ksize, double sigma, {int ktype = 6}) { /// For further details, please see: /// https:///docs.opencv.org/master/d4/d86/group__imgproc__filter.html#gacea54f142e81b6758cb6f375ce782c8d Mat sobel(Mat src, int ddepth, int dx, int dy, - {Mat? dst, int ksize = 3, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT}) { + {Mat? dst, + int ksize = 3, + double scale = 1, + double delta = 0, + int borderType = BORDER_DEFAULT}) { dst ??= Mat.empty(); cvRun(() => CFFI.Sobel(src.ref, dst!.ref, ddepth, dx, dy, ksize, scale, delta, borderType)); return dst; @@ -720,11 +726,11 @@ VecPoint2f goodFeaturesToTrack( corners ??= VecPoint2f(); mask ??= Mat.empty(); if (gradientSize == null) { - cvRun(() => CFFI.GoodFeaturesToTrack(image.ref, corners!.ref, maxCorners, qualityLevel, minDistance, - mask!.ref, blockSize, useHarrisDetector, k)); + cvRun(() => CFFI.GoodFeaturesToTrack(image.ref, corners!.ref, maxCorners, qualityLevel, + minDistance, mask!.ref, blockSize, useHarrisDetector, k)); } else { - cvRun(() => CFFI.GoodFeaturesToTrackWithGradient(image.ref, corners!.ref, maxCorners, qualityLevel, - minDistance, mask!.ref, blockSize, gradientSize, useHarrisDetector, k)); + cvRun(() => CFFI.GoodFeaturesToTrackWithGradient(image.ref, corners!.ref, maxCorners, + qualityLevel, minDistance, mask!.ref, blockSize, gradientSize, useHarrisDetector, k)); } return corners; } @@ -742,7 +748,8 @@ VecPoint2f goodFeaturesToTrack( int iterCount, { int mode = GC_EVAL, }) { - cvRun(() => CFFI.GrabCut(img.ref, mask.ref, rect.ref, bgdModel.ref, fgdModel.ref, iterCount, mode)); + cvRun( + () => CFFI.GrabCut(img.ref, mask.ref, rect.ref, bgdModel.ref, fgdModel.ref, iterCount, mode)); return (mask, bgdModel, fgdModel); } @@ -796,7 +803,8 @@ Mat HoughLines( double max_theta = CV_PI, }) { lines ??= Mat.empty(); - cvRun(() => CFFI.HoughLines(image.ref, lines!.ref, rho, theta, threshold, srn, stn, min_theta, max_theta)); + cvRun(() => CFFI.HoughLines( + image.ref, lines!.ref, rho, theta, threshold, srn, stn, min_theta, max_theta)); return lines; } @@ -849,8 +857,8 @@ Mat HoughLinesPointSet( OutputArray? lines, }) { lines ??= Mat.empty(); - cvRun(() => CFFI.HoughLinesPointSet(point.ref, lines!.ref, lines_max, threshold, min_rho, max_rho, rho_step, - min_theta, max_theta, theta_step)); + cvRun(() => CFFI.HoughLinesPointSet(point.ref, lines!.ref, lines_max, threshold, min_rho, max_rho, + rho_step, min_theta, max_theta, theta_step)); return lines; } @@ -906,8 +914,8 @@ Mat adaptiveThreshold( OutputArray? dst, }) { dst ??= Mat.empty(); - cvRun( - () => CFFI.AdaptiveThreshold(src.ref, dst!.ref, maxValue, adaptiveMethod, thresholdType, blockSize, C)); + cvRun(() => CFFI.AdaptiveThreshold( + src.ref, dst!.ref, maxValue, adaptiveMethod, thresholdType, blockSize, C)); return dst; } @@ -926,7 +934,8 @@ Mat arrowedLine( int shift = 0, double tipLength = 0.1, }) { - cvRun(() => CFFI.ArrowedLine(img.ref, pt1.ref, pt2.ref, color.ref, thickness, line_type, shift, tipLength)); + cvRun(() => CFFI.ArrowedLine( + img.ref, pt1.ref, pt2.ref, color.ref, thickness, line_type, shift, tipLength)); return img; } @@ -943,7 +952,8 @@ Mat circle( int lineType = LINE_8, int shift = 0, }) { - cvRun(() => CFFI.CircleWithParams(img.ref, center.ref, radius, color.ref, thickness, lineType, shift)); + cvRun(() => + CFFI.CircleWithParams(img.ref, center.ref, radius, color.ref, thickness, lineType, shift)); return img; } @@ -963,8 +973,8 @@ Mat ellipse( int lineType = LINE_8, int shift = 0, }) { - cvRun(() => CFFI.EllipseWithParams( - img.ref, center.ref, axes.ref, angle, startAngle, endAngle, color.ref, thickness, lineType, shift)); + cvRun(() => CFFI.EllipseWithParams(img.ref, center.ref, axes.ref, angle, startAngle, endAngle, + color.ref, thickness, lineType, shift)); return img; } @@ -1052,7 +1062,8 @@ Mat polylines( final baseline = arena(); final size = arena(); final textPtr = text.toNativeUtf8(allocator: arena); - cvRun(() => CFFI.GetTextSizeWithBaseline(textPtr.cast(), fontFace, fontScale, thickness, baseline, size)); + cvRun(() => CFFI.GetTextSizeWithBaseline( + textPtr.cast(), fontFace, fontScale, thickness, baseline, size)); Size sz = (size.ref.width, size.ref.height); return (sz, baseline.value); }); @@ -1366,7 +1377,8 @@ Mat remap( }) { borderValue ??= Scalar.default_(); dst ??= Mat.empty(); - cvRun(() => CFFI.Remap(src.ref, dst!.ref, map1.ref, map2.ref, interpolation, borderMode, borderValue!.ref)); + cvRun(() => CFFI.Remap( + src.ref, dst!.ref, map1.ref, map2.ref, interpolation, borderMode, borderValue!.ref)); return dst; } @@ -1444,7 +1456,8 @@ Mat linearPolar(InputArray src, Point2f center, double maxRadius, int flags, {Ou /// distType: DistanceTypes /// For further details, please see: /// https:///docs.opencv.org/master/d3/dc0/group__imgproc__shape.html#gaf849da1fdafa67ee84b1e9a23b93f91f -Mat fitLine(VecPoint points, int distType, double param, double reps, double aeps, {OutputArray? line}) { +Mat fitLine(VecPoint points, int distType, double param, double reps, double aeps, + {OutputArray? line}) { line ??= Mat.empty(); cvRun(() => CFFI.FitLine(points.ref, line!.ref, distType, param, reps, aeps)); return line; @@ -1478,7 +1491,8 @@ Mat invertAffineTransform(InputArray M, {OutputArray? iM}) { /// /// For further details, please see: /// https:///docs.opencv.org/master/d7/df3/group__imgproc__motion.html#ga552420a2ace9ef3fb053cd630fdb4952 -(Point2f rval, double response) phaseCorrelate(InputArray src1, InputArray src2, {InputArray? window}) { +(Point2f rval, double response) phaseCorrelate(InputArray src1, InputArray src2, + {InputArray? window}) { window ??= Mat.empty(); return cvRunArena<(Point2f, double)>((arena) { final p = arena(); diff --git a/lib/src/objdetect/objdetect.dart b/lib/src/objdetect/objdetect.dart index c0b7b3fe..b54b97e9 100644 --- a/lib/src/objdetect/objdetect.dart +++ b/lib/src/objdetect/objdetect.dart @@ -51,15 +51,16 @@ class CascadeClassifier extends CvStruct { }) { return using((arena) { final ret = arena(); - cvRun(() => CFFI.CascadeClassifier_DetectMultiScaleWithParams(ref, image.ref, scaleFactor, minNeighbors, - flags, minSize.toSize(arena).ref, maxSize.toSize(arena).ref, ret)); + cvRun(() => CFFI.CascadeClassifier_DetectMultiScaleWithParams(ref, image.ref, scaleFactor, + minNeighbors, flags, minSize.toSize(arena).ref, maxSize.toSize(arena).ref, ret)); return VecRect.fromVec(ret.ref); }); } @override cvg.CascadeClassifier get ref => ptr.ref; - static final finalizer = OcvFinalizer(CFFI.addresses.CascadeClassifier_Close); + static final finalizer = + OcvFinalizer(CFFI.addresses.CascadeClassifier_Close); @override List get props => [ptr.address]; @@ -178,7 +179,8 @@ class QRCodeDetector extends CvStruct { final points = VecPoint.fromList([]); final s = cvRunArena((arena) { final v = arena(); - cvRun(() => CFFI.QRCodeDetector_DetectAndDecode(ref, img.ref, points.ptr, straightCode!.ptr, v)); + cvRun(() => + CFFI.QRCodeDetector_DetectAndDecode(ref, img.ref, points.ptr, straightCode!.ptr, v)); if (v == ffi.nullptr) return ""; return VecChar.fromVec(v.ref).toString(); }); @@ -211,7 +213,8 @@ class QRCodeDetector extends CvStruct { points ??= VecPoint(); final ret = VecChar(); straightCode ??= Mat.empty(); - cvRun(() => CFFI.QRCodeDetector_Decode(ref, img.ref, points!.ref, straightCode!.ref, ret.ptr)); + cvRun( + () => CFFI.QRCodeDetector_Decode(ref, img.ref, points!.ref, straightCode!.ref, ret.ptr)); return (ret.toString(), points, straightCode!); }); } diff --git a/lib/src/photo/photo.dart b/lib/src/photo/photo.dart index 402b4d00..c0325d41 100644 --- a/lib/src/photo/photo.dart +++ b/lib/src/photo/photo.dart @@ -33,7 +33,8 @@ class MergeMertens extends CvStruct { double exposureWeight = 0.0, }) { final p = calloc(); - cvRun(() => CFFI.MergeMertens_CreateWithParams(contrastWeight, saturationWeight, exposureWeight, p)); + cvRun(() => + CFFI.MergeMertens_CreateWithParams(contrastWeight, saturationWeight, exposureWeight, p)); return MergeMertens._(p); } @@ -169,7 +170,8 @@ Mat textureFlattening( int kernelSize = 3, }) { final dst = Mat.empty(); - cvRun(() => CFFI.TextureFlattening(src.ref, mask.ref, dst.ref, lowThreshold, highThreshold, kernelSize)); + cvRun(() => + CFFI.TextureFlattening(src.ref, mask.ref, dst.ref, lowThreshold, highThreshold, kernelSize)); return dst; } diff --git a/lib/src/utils/bytesio.dart b/lib/src/utils/bytesio.dart index e69de29b..8b137891 100644 --- a/lib/src/utils/bytesio.dart +++ b/lib/src/utils/bytesio.dart @@ -0,0 +1 @@ + diff --git a/lib/src/video/video.dart b/lib/src/video/video.dart index 6ba8d2d4..b257ad0d 100644 --- a/lib/src/video/video.dart +++ b/lib/src/video/video.dart @@ -323,8 +323,10 @@ class KalmanFilter extends CvStruct { }); } - void init(int dynamParams, int measureParams, {int controlParams = 0, int type = MatType.CV_32F}) { - cvRun(() => CFFI.KalmanFilter_InitWithParams(ref, dynamParams, measureParams, controlParams, type)); + void init(int dynamParams, int measureParams, + {int controlParams = 0, int type = MatType.CV_32F}) { + cvRun(() => + CFFI.KalmanFilter_InitWithParams(ref, dynamParams, measureParams, controlParams, type)); } @override diff --git a/lib/src/video/videoio.dart b/lib/src/video/videoio.dart index 3d68f300..aaf17ecb 100644 --- a/lib/src/video/videoio.dart +++ b/lib/src/video/videoio.dart @@ -152,7 +152,8 @@ class VideoWriter extends CvStruct { return VideoWriter._(p); } - factory VideoWriter.open(String filename, String codec, double fps, Size frameSize, {bool isColor = true}) { + factory VideoWriter.open(String filename, String codec, double fps, Size frameSize, + {bool isColor = true}) { return cvRunArena((arena) { final p = calloc(); cvRun(() => CFFI.VideoWriter_New(p)); @@ -177,8 +178,8 @@ class VideoWriter extends CvStruct { using((arena) { final name = filename.toNativeUtf8(allocator: arena); final codec_ = codec.toNativeUtf8(allocator: arena); - cvRun(() => - CFFI.VideoWriter_Open(ref, name.cast(), codec_.cast(), fps, frameSize.$1, frameSize.$2, isColor)); + cvRun(() => CFFI.VideoWriter_Open( + ref, name.cast(), codec_.cast(), fps, frameSize.$1, frameSize.$2, isColor)); }); } diff --git a/test/aruco_test.dart b/test/aruco_test.dart index 6b71163f..520f9e9a 100644 --- a/test/aruco_test.dart +++ b/test/aruco_test.dart @@ -128,8 +128,8 @@ void main() async { expect(params.cornerRefinementMinAccuracy, closeTo(cornerRefinementMinAccuracy, 1e-4)); expect(params.markerBorderBits, markerBorderBits); expect(params.perspectiveRemovePixelPerCell, perspectiveRemovePixelPerCell); - expect( - params.perspectiveRemoveIgnoredMarginPerCell, closeTo(perspectiveRemoveIgnoredMarginPerCell, 1e-4)); + expect(params.perspectiveRemoveIgnoredMarginPerCell, + closeTo(perspectiveRemoveIgnoredMarginPerCell, 1e-4)); expect(params.maxErroneousBitsInBorderRate, closeTo(maxErroneousBitsInBorderRate, 1e-4)); expect(params.minOtsuStdDev, closeTo(minOtsuStdDev, 1e-4)); expect(params.errorCorrectionRate, closeTo(errorCorrectionRate, 1e-4)); diff --git a/test/calib3d_test.dart b/test/calib3d_test.dart index 05e68255..7a8bfd29 100644 --- a/test/calib3d_test.dart +++ b/test/calib3d_test.dart @@ -236,7 +236,8 @@ void main() async { expect(mtx.isEmpty || dist.isEmpty || rvecs.isEmpty || tvecs.isEmpty, false); final dst = cv.undistort(img, cameraMatrix, distCoeffs); - final target = cv.imread("test/images/chessboard_4x6_distort_correct.png", flags: cv.IMREAD_GRAYSCALE); + final target = + cv.imread("test/images/chessboard_4x6_distort_correct.png", flags: cv.IMREAD_GRAYSCALE); final xor = cv.bitwiseXOR(dst, target); final sum = xor.sum(); expect(sum.val1, lessThan(img.rows * img.cols * 0.005)); diff --git a/test/core/core_test.dart b/test/core/core_test.dart index f4107985..d6068d17 100644 --- a/test/core/core_test.dart +++ b/test/core/core_test.dart @@ -1,3 +1,5 @@ +// ignore_for_file: avoid_print + import 'package:test/test.dart'; import 'package:opencv_dart/opencv_dart.dart' as cv; @@ -184,7 +186,8 @@ void main() async { final mean = cv.Mat.empty(); final eigenvectors = cv.Mat.empty(); final eigenvalues = cv.Mat.empty(); - cv.PCACompute(src, mean, eigenvalues: eigenvalues, eigenvectors: eigenvectors, maxComponents: 2); + cv.PCACompute(src, mean, + eigenvalues: eigenvalues, eigenvectors: eigenvectors, maxComponents: 2); expect(mean.isEmpty || eigenvectors.isEmpty || eigenvalues.isEmpty, equals(false)); expect(eigenvectors.rows, equals(2)); }); @@ -260,8 +263,8 @@ void main() async { test('cv.inRange', () { final mat1 = cv.Mat.randu(101, 102, cv.MatType.CV_8UC1); - final lb = cv.Mat.fromScalar(cv.Scalar(20, 100, 100, 0), cv.MatType.CV_8UC1); - final ub = cv.Mat.fromScalar(cv.Scalar(20, 100, 100, 0), cv.MatType.CV_8UC1); + final lb = cv.Mat.fromScalar(1, 1, cv.MatType.CV_8UC1, cv.Scalar(20, 100, 100, 0)); + final ub = cv.Mat.fromScalar(1, 1, cv.MatType.CV_8UC1, cv.Scalar(20, 100, 100, 0)); final dst = cv.inRange(mat1, lb, ub); expect(dst.isEmpty, equals(false)); }); @@ -299,7 +302,8 @@ void main() async { final src = [cv.Point2f(0, 0), cv.Point2f(1, 1)].cvd; final bestLabels = cv.Mat.empty(); const criteria = (cv.TERM_COUNT, 10, 1.0); - final (_, _, centers) = cv.kmeansByPoints(src, 2, bestLabels, criteria, 2, cv.KMEANS_RANDOM_CENTERS); + final (_, _, centers) = + cv.kmeansByPoints(src, 2, bestLabels, criteria, 2, cv.KMEANS_RANDOM_CENTERS); expect(centers.isEmpty, equals(false)); }); @@ -365,7 +369,7 @@ void main() async { }); test('cv.mixChannels', () { - final bgra = cv.Mat.fromScalar(cv.Scalar(255, 0, 0, 255), cv.MatType.CV_8UC4, rows: 100, cols: 100); + final bgra = cv.Mat.fromScalar(100, 100, cv.MatType.CV_8UC4, cv.Scalar(255, 0, 0, 255)); final bgr = cv.Mat.create(cols: bgra.cols, rows: bgra.rows, type: cv.MatType.CV_8UC3); final alpha = cv.Mat.create(cols: bgra.cols, rows: bgra.rows, type: cv.MatType.CV_8UC1); final out = [bgr, alpha].cvd; @@ -445,7 +449,8 @@ void main() async { final (rootsCount, roots) = cv.solveCubic(coeffs); expect(rootsCount, equals(3)); - expect((roots.at(0, 0), roots.at(0, 1), roots.at(0, 2)), (-3.0, 2.0, -0.5)); + expect((roots.at(0, 0), roots.at(0, 1), roots.at(0, 2)), + (-3.0, 2.0, -0.5)); }); test('cv.solvePoly', () { @@ -600,7 +605,7 @@ void main() async { }); test('cv.pow', () { - final src = cv.Mat.fromScalar(cv.Scalar.all(2), cv.MatType.CV_8UC3, rows: 512, cols: 512); + final src = cv.Mat.fromScalar(512, 512, cv.MatType.CV_8UC3, cv.Scalar.all(2)); final dst = cv.pow(src, 3); expect(dst.at(0, 0), 8); }); @@ -613,8 +618,8 @@ void main() async { }); test('cv.phase', () { - final x = cv.Mat.fromScalar(cv.Scalar(1.1, 2.2, 3.3, 4.4), cv.MatType.CV_32FC1); - final y = cv.Mat.fromScalar(cv.Scalar(5.5, 6.6, 7.7, 8.8), cv.MatType.CV_32FC1); + final x = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32FC1, cv.Scalar(1.1, 2.2, 3.3, 4.4)); + final y = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32FC1, cv.Scalar(5.5, 6.6, 7.7, 8.8)); final angle = cv.phase(x, y); expect(angle.isEmpty, false); expect(angle.rows, equals(x.rows)); @@ -655,7 +660,8 @@ void main() async { test( 'cv.setNumThreads', onPlatform: { - "mac-os": const Skip("seems won't work properly on macos, https://github.com/opencv/opencv/issues/5150") + "mac-os": const Skip( + "seems won't work properly on macos, https://github.com/opencv/opencv/issues/5150") }, () { cv.setNumThreads(2); diff --git a/test/core/mat_test.dart b/test/core/mat_test.dart index cf7f518c..4c330022 100644 --- a/test/core/mat_test.dart +++ b/test/core/mat_test.dart @@ -241,7 +241,7 @@ void main() async { }); test('Mat test others', () { - final mat0 = cv.Mat.ones(200, 100, cv.MatType.CV_8UC3); + final mat0 = cv.Mat.fromScalar(200, 100, cv.MatType.CV_8UC3, cv.Scalar(1, 1, 1, 1)); expect(mat0.props, equals([mat0.ptr.address])); final data = mat0.data; expect(data.length, greaterThan(0)); @@ -256,10 +256,20 @@ void main() async { expect(mat1.at(0, 0), 1); final sqrt_ = mat1.sqrt(); expect(sqrt_.at(0, 0), equals(1.0)); + + final matB = cv.extractChannel(mat0, 0); + final meanB = matB.mean(); + expect(meanB.val1, equals(1)); + final sumB = matB.sum(); + expect(sumB.val1, equals(200 * 100)); + + final matG = cv.extractChannel(mat0, 1); + final meanG = matG.mean(); + expect(meanG.val1, equals(1)); }); test('Mat At Set Vec*b(uchar)', () { - var mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_8UC2); + var mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_8UC2, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec2b(2, 4)); @@ -269,7 +279,7 @@ void main() async { mat.set(0, 0, cv.Vec2b(99, 99)); expect(mat.at(0, 0), cv.Vec2b(99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_8UC3); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_8UC3, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec3b(2, 4, 1)); @@ -279,7 +289,7 @@ void main() async { mat.set(0, 0, cv.Vec3b(99, 99, 99)); expect(mat.at(0, 0), cv.Vec3b(99, 99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_8UC4); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_8UC4, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec4b(2, 4, 1, 0)); @@ -291,7 +301,7 @@ void main() async { }); test('Mat At Set Vec*w(ushort)', () { - var mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_16UC2); + var mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_16UC2, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec2w(2, 4)); @@ -301,7 +311,7 @@ void main() async { mat.set(0, 0, cv.Vec2w(99, 99)); expect(mat.at(0, 0), cv.Vec2w(99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_16UC3); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_16UC3, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec3w(2, 4, 1)); @@ -311,7 +321,7 @@ void main() async { mat.set(0, 0, cv.Vec3w(99, 99, 99)); expect(mat.at(0, 0), cv.Vec3w(99, 99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_16UC4); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_16UC4, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec4w(2, 4, 1, 0)); @@ -323,7 +333,7 @@ void main() async { }); test('Mat At Set Vec*s(short)', () { - var mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_16SC2); + var mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_16SC2, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec2s(2, 4)); @@ -333,7 +343,7 @@ void main() async { mat.set(0, 0, cv.Vec2s(99, 99)); expect(mat.at(0, 0), cv.Vec2s(99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_16SC3); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_16SC3, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec3s(2, 4, 1)); @@ -343,7 +353,7 @@ void main() async { mat.set(0, 0, cv.Vec3s(99, 99, 99)); expect(mat.at(0, 0), cv.Vec3s(99, 99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_16SC4); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_16SC4, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec4s(2, 4, 1, 0)); @@ -355,7 +365,7 @@ void main() async { }); test('Mat At Set Vec*i(int)', () { - var mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_32SC2); + var mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32SC2, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec2i(2, 4)); @@ -365,7 +375,7 @@ void main() async { mat.set(0, 0, cv.Vec2i(99, 99)); expect(mat.at(0, 0), cv.Vec2i(99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_32SC3); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32SC3, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec3i(2, 4, 1)); @@ -375,7 +385,7 @@ void main() async { mat.set(0, 0, cv.Vec3i(99, 99, 99)); expect(mat.at(0, 0), cv.Vec3i(99, 99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_32SC4); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32SC4, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), 2); expect(mat.at(0, 0), cv.Vec4i(2, 4, 1, 0)); @@ -387,7 +397,7 @@ void main() async { }); test('Mat At Set Vec*f(float)', () { - var mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_32FC2); + var mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32FC2, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), closeTo(2, 1e-3)); expect(mat.at(0, 0), cv.Vec2f(2, 4)); @@ -397,7 +407,7 @@ void main() async { mat.set(0, 0, cv.Vec2f(99, 99)); expect(mat.at(0, 0), cv.Vec2f(99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_32FC3); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32FC3, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), closeTo(2, 1e-3)); expect(mat.at(0, 0), cv.Vec3f(2, 4, 1)); @@ -407,7 +417,7 @@ void main() async { mat.set(0, 0, cv.Vec3f(99, 99, 99)); expect(mat.at(0, 0), cv.Vec3f(99, 99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_32FC4); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_32FC4, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), closeTo(2, 1e-3)); expect(mat.at(0, 0), cv.Vec4f(2, 4, 1, 0)); @@ -419,7 +429,7 @@ void main() async { }); test('Mat At Set Vec*d(double)', () { - var mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_64FC2); + var mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_64FC2, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), closeTo(2, 1e-3)); expect(mat.at(0, 0), cv.Vec2d(2, 4)); @@ -429,7 +439,7 @@ void main() async { mat.set(0, 0, cv.Vec2d(99, 99)); expect(mat.at(0, 0), cv.Vec2d(99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_64FC3); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_64FC3, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), closeTo(2, 1e-3)); expect(mat.at(0, 0), cv.Vec3d(2, 4, 1)); @@ -439,7 +449,7 @@ void main() async { mat.set(0, 0, cv.Vec3d(99, 99, 99)); expect(mat.at(0, 0), cv.Vec3d(99, 99, 99)); - mat = cv.Mat.fromScalar(cv.Scalar(2, 4, 1, 0), cv.MatType.CV_64FC4); + mat = cv.Mat.fromScalar(1, 1, cv.MatType.CV_64FC4, cv.Scalar(2, 4, 1, 0)); expect(mat.at(0, 0), closeTo(2, 1e-3)); expect(mat.at(0, 0), cv.Vec4d(2, 4, 1, 0)); diff --git a/test/core/point_test.dart b/test/core/point_test.dart index e0c0b585..3f0e52a8 100644 --- a/test/core/point_test.dart +++ b/test/core/point_test.dart @@ -103,7 +103,12 @@ void main() { final vec = [].cvd; expect(vec.length, 0); - final points = [cv.Point3f(1, 2, 1), cv.Point3f(3, 4, 3), cv.Point3f(5, 6, 5), cv.Point3f(7, 8, 7)]; + final points = [ + cv.Point3f(1, 2, 1), + cv.Point3f(3, 4, 3), + cv.Point3f(5, 6, 5), + cv.Point3f(7, 8, 7) + ]; final vec1 = points.cvd; expect(vec1.length, 4); expect(vec1.first, points.first); @@ -111,7 +116,12 @@ void main() { }); test('VecPoint3f.fromMat', () { - final points = [cv.Point3f(1, 2, 1), cv.Point3f(3, 4, 3), cv.Point3f(5, 6, 5), cv.Point3f(7, 8, 7)]; + final points = [ + cv.Point3f(1, 2, 1), + cv.Point3f(3, 4, 3), + cv.Point3f(5, 6, 5), + cv.Point3f(7, 8, 7) + ]; final mat = cv.Mat.fromVec(points.cvd); final vec = cv.VecPoint3f.fromMat(mat); diff --git a/test/core/vec_test.dart b/test/core/vec_test.dart index 7de21d51..02b2717e 100644 --- a/test/core/vec_test.dart +++ b/test/core/vec_test.dart @@ -105,8 +105,8 @@ void main() { }); test('VecVecDMatch', () { - final points = List.generate( - 10, (index) => List.generate(10, (index) => cv.DMatch(index, index, index, index.toDouble()))); + final points = List.generate(10, + (index) => List.generate(10, (index) => cv.DMatch(index, index, index, index.toDouble()))); final vec = points.cvd; expect(vec.length, points.length); expect(vec.first, points.first); diff --git a/test/dnn_test.dart b/test/dnn_test.dart index 210040ed..1438ac3c 100644 --- a/test/dnn_test.dart +++ b/test/dnn_test.dart @@ -134,8 +134,8 @@ void main() async { }); test('cv.Net.fromCaffe', () { - final model = - cv.Net.fromCaffe("test/models/bvlc_googlenet.prototxt", "test/models/bvlc_googlenet.caffemodel"); + final model = cv.Net.fromCaffe( + "test/models/bvlc_googlenet.prototxt", "test/models/bvlc_googlenet.caffemodel"); checkCaffeNet(model); }); diff --git a/test/highgui_test.dart b/test/highgui_test.dart index 875bc429..bb493010 100644 --- a/test/highgui_test.dart +++ b/test/highgui_test.dart @@ -14,7 +14,8 @@ void main() async { expect(val, -1); expect(win.isOpen, true); - win.setWindowProperty(cv.WindowPropertyFlags.WND_PROP_FULLSCREEN, cv.WindowFlag.WINDOW_FULLSCREEN.value); + win.setWindowProperty( + cv.WindowPropertyFlags.WND_PROP_FULLSCREEN, cv.WindowFlag.WINDOW_FULLSCREEN.value); expect(win.getWindowProperty(cv.WindowPropertyFlags.WND_PROP_FULLSCREEN), cv.WindowFlag.WINDOW_FULLSCREEN.value); win.moveWindow(100, 100); diff --git a/test/imgproc_test.dart b/test/imgproc_test.dart index a7d7a370..d47fb361 100644 --- a/test/imgproc_test.dart +++ b/test/imgproc_test.dart @@ -61,7 +61,8 @@ void main() async { final mask = cv.Mat.empty(); final hist = cv.calcHist([img].cvd, [0].i32, mask, [256].i32, [0.0, 256.0].f32); - final backProject = cv.calcBackProject([img].cvd, [0].i32, hist, [0.0, 256.0].f32, uniform: false); + final backProject = + cv.calcBackProject([img].cvd, [0].i32, hist, [0.0, 256.0].f32, uniform: false); expect(backProject.isEmpty, false); }); @@ -160,7 +161,8 @@ void main() async { final cvImage = cv.imread(r"test/images/circles.jpg", flags: cv.IMREAD_GRAYSCALE); expect((cvImage.width, cvImage.height), (512, 512)); final imgNew = cv.equalizeHist(cvImage); - expect((cvImage.width, cvImage.height, cvImage.channels), (imgNew.width, imgNew.height, imgNew.channels)); + expect((cvImage.width, cvImage.height, cvImage.channels), + (imgNew.width, imgNew.height, imgNew.channels)); expect(cv.imwrite("test/images_out/circles_equalized.jpg", imgNew), equals(true)); }); @@ -212,7 +214,8 @@ void main() async { test('basic drawings', () { final src = cv.Mat.create(cols: 100, rows: 100, type: cv.MatType.CV_8UC3); - cv.line(src, cv.Point(10, 10), cv.Point(90, 90), cv.Scalar.red, thickness: 2, lineType: cv.LINE_AA); + cv.line(src, cv.Point(10, 10), cv.Point(90, 90), cv.Scalar.red, + thickness: 2, lineType: cv.LINE_AA); cv.ellipse(src, cv.Point(50, 50), cv.Point(10, 20), 30.0, 0, 360, cv.Scalar.green); cv.rectangle(src, cv.Rect(20, 20, 30, 50), cv.Scalar.blue); final pts = [(10, 5), (20, 30), (70, 20), (50, 10)].map((e) => cv.Point(e.$1, e.$2)).toList(); @@ -246,7 +249,8 @@ void main() async { final (_, thres) = cv.threshold(gray, 25, 255, cv.THRESH_BINARY); - final (dest, labels) = cv.distanceTransform(thres, cv.DIST_L2, cv.DIST_MASK_3, cv.DIST_LABEL_CCOMP); + final (dest, labels) = + cv.distanceTransform(thres, cv.DIST_L2, cv.DIST_MASK_3, cv.DIST_LABEL_CCOMP); expect(dest.isEmpty || dest.rows != img.rows || dest.cols != img.cols, false); expect(labels.isEmpty, false); }); @@ -900,7 +904,8 @@ void main() async { cv.Point2f(1167.2201416015625, 693.495068359375), ]; - var (affineMatrix, _) = cv.estimateAffinePartial2D(landmarks.cvd, faceTemplate.cvd, method: cv.LMEDS); + var (affineMatrix, _) = + cv.estimateAffinePartial2D(landmarks.cvd, faceTemplate.cvd, method: cv.LMEDS); var invMask = cv.warpAffine(mask, affineMatrix, (2048, 2048)); for (int i = 0; i < 2047; i++) { diff --git a/test/perf_mat.dart b/test/perf_mat.dart index ebea1337..957113c5 100644 --- a/test/perf_mat.dart +++ b/test/perf_mat.dart @@ -1,3 +1,5 @@ +// ignore_for_file: unused_local_variable, avoid_print + import 'package:opencv_dart/opencv_dart.dart' as cv; void main() { @@ -8,6 +10,7 @@ void main() { final mat1 = cv.cvtColor(mat, cv.COLOR_BGR2YCrCb); } sw.stop(); - print("All: ${sw.elapsedMicroseconds}μs, counts: $counts, per: ${sw.elapsedMicroseconds / counts} μs"); + print( + "All: ${sw.elapsedMicroseconds}μs, counts: $counts, per: ${sw.elapsedMicroseconds / counts} μs"); print("Finished"); } diff --git a/test/svd_test.dart b/test/svd_test.dart index 7f9e5681..3c571057 100644 --- a/test/svd_test.dart +++ b/test/svd_test.dart @@ -33,8 +33,14 @@ void main() async { expect(vt.size, [2, 2]); expect(checkFunc([w.at(0, 0), w.at(1, 0)], resultW), true); - expect(checkFunc([u.at(0, 0), u.at(0, 1), u.at(1, 0), u.at(1, 1)], resultU), true); - expect(checkFunc([vt.at(0, 0), vt.at(0, 1), vt.at(1, 0), vt.at(1, 1)], resultVt), + expect( + checkFunc([u.at(0, 0), u.at(0, 1), u.at(1, 0), u.at(1, 1)], + resultU), + true); + expect( + checkFunc( + [vt.at(0, 0), vt.at(0, 1), vt.at(1, 0), vt.at(1, 1)], + resultVt), true); }); } diff --git a/test/video_test.dart b/test/video_test.dart index 99b90247..8bfc4efc 100644 --- a/test/video_test.dart +++ b/test/video_test.dart @@ -79,9 +79,11 @@ void main() async { final mapTranslation = cv.Mat.eye(2, 3, cv.MatType.CV_32FC1); const criteria = (cv.TERM_COUNT + cv.TERM_EPS, 50, 0.01); final inputMask = cv.Mat.empty(); - cv.findTransformECC(wrappedImage, testImg, mapTranslation, cv.MOTION_TRANSLATION, criteria, inputMask, 5); + cv.findTransformECC( + wrappedImage, testImg, mapTranslation, cv.MOTION_TRANSLATION, criteria, inputMask, 5); - expect((mapTranslation.rows, mapTranslation.cols), (translationGround.rows, translationGround.cols)); + expect((mapTranslation.rows, mapTranslation.cols), + (translationGround.rows, translationGround.cols)); }); test('cv.TrackerMIL', () {