@@ -29,7 +29,7 @@ class Mat extends CvStruct<cvg.Mat> {
29
29
/// Mat (Size size, int type, void *data, size_t step=AUTO_STEP)
30
30
///
31
31
/// https://docs.opencv.org/4.x/d3/d63/classcv_1_1Mat.html#a9fa74fb14362d87cb183453d2441948f
32
- factory Mat .fromList (int rows, int cols, MatType type, List data, [int step = 0 ]) {
32
+ factory Mat .fromList (int rows, int cols, MatType type, List < num > data, [int step = 0 ]) {
33
33
assert (data is List <int > || data is List <double >, "Only support List<int> or List<double>" );
34
34
final p = calloc< cvg.Mat > ();
35
35
// 1 copy
@@ -425,7 +425,7 @@ class Mat extends CvStruct<cvg.Mat> {
425
425
///
426
426
/// https://docs.opencv.org/4.x/d3/d63/classcv_1_1Mat.html#a7a6d7e3696b8b19b9dfac3f209118c40
427
427
T at <T >(int row, int col, [int ? i2]) {
428
- if (T == int || T == double ) {
428
+ if (T == int || T == double || T == num ) {
429
429
return atNum (row, col, i2) as T ;
430
430
} else if (isSubtype <T , CvVec >()) {
431
431
return atVec <T >(row, col);
@@ -1282,21 +1282,21 @@ class Mat extends CvStruct<cvg.Mat> {
1282
1282
void release () => cvRun (() => CFFI .Mat_Release (ptr));
1283
1283
1284
1284
/// This Method converts single-channel Mat to 2D List
1285
- List <List <num >> toList () {
1286
- switch (type.depth) {
1287
- case MatType .CV_8U :
1288
- case MatType .CV_8S :
1289
- case MatType . CV_16U :
1290
- case MatType .CV_16S :
1291
- case MatType . CV_32S :
1292
- return List . generate (rows, (row) => List . generate (cols, (col) => at < int >(row, col)));
1293
- case MatType . CV_32F :
1294
- case MatType .CV_64F :
1295
- return List .generate (rows, (row) => List .generate (cols, (col) => at < double > (row, col)));
1296
- default :
1297
- throw UnsupportedError ( "toList() for $ type is not supported!" );
1298
- }
1299
- }
1285
+ List <List <num >> toList () => switch (type.depth) {
1286
+ MatType . CV_8U => List . generate (rows, (row) => List . generate (cols, (col) => atU8 (row, col))),
1287
+ MatType .CV_8S => List . generate (rows, (row) => List . generate (cols, (col) => atI8 (row, col))),
1288
+ MatType .CV_16U =>
1289
+ List . generate (rows, (row) => List . generate (cols, (col) => atU16 (row, col))),
1290
+ MatType .CV_16S =>
1291
+ List . generate (rows, (row) => List . generate (cols, (col) => atI16 (row, col))),
1292
+ MatType . CV_32S =>
1293
+ List . generate (rows, (row) => List . generate (cols, (col) => atI32 (row, col))),
1294
+ MatType .CV_32F =>
1295
+ List .generate (rows, (row) => List .generate (cols, (col) => atF32 (row, col))),
1296
+ MatType . CV_64F =>
1297
+ List . generate (rows, (row) => List . generate (cols, (col) => atF64 (row, col))),
1298
+ _ => throw UnsupportedError ( "toList() for $ type is not supported!" )
1299
+ };
1300
1300
1301
1301
/// Returns a 3D list of the mat, only for multi-channel mats.
1302
1302
/// The list is ordered as [row][col][channel] .
@@ -1310,10 +1310,10 @@ class Mat extends CvStruct<cvg.Mat> {
1310
1310
/// final list = mat.toList3D<Vec3b, int>();
1311
1311
/// print(list); // [[[0, 1, 2], [3, 4, 5], [6, 7, 8]]]
1312
1312
/// ```
1313
- List <List <List <P >>> toList3D <T extends CvVec , P extends num >() {
1313
+ List <List <List <num >>> toList3D <T extends CvVec >() {
1314
1314
assert (channels >= 2 , "toList3D() only for channels >= 2, but this.channels=$channels " );
1315
1315
return List .generate (
1316
- rows, (row) => List .generate (cols, (col) => at <T >(row, col).val as List < P > ));
1316
+ rows, (row) => List .generate (cols, (col) => at <T >(row, col).val));
1317
1317
}
1318
1318
1319
1319
/// Get the data pointer of the Mat, this getter will reture a view of native
0 commit comments