@@ -10,6 +10,7 @@ import 'package:opencv_dart/src/core/mat_type.dart';
1010import '../core/base.dart' ;
1111import '../core/mat.dart' ;
1212import '../core/point.dart' ;
13+ import '../core/rect.dart' ;
1314import '../core/scalar.dart' ;
1415import '../core/size.dart' ;
1516import '../core/vec.dart' ;
@@ -233,6 +234,112 @@ class ximgproc {
233234 static const int BINARIZATION_NICK = 3 ;
234235}
235236
237+ /// https://docs.opencv.org/4.x/dd/d65/classcv_1_1ximgproc_1_1EdgeBoxes.html#details
238+ class EdgeBoxes extends CvStruct <cvg.EdgeBoxes > {
239+ EdgeBoxes .fromPointer (super .ptr, [bool attach = true ]) : super .fromPointer () {
240+ if (attach) finalizer.attach (this , ptr.cast (), detach: this );
241+ }
242+
243+ /// https://docs.opencv.org/4.x/dd/d65/classcv_1_1ximgproc_1_1EdgeBoxes.html#details
244+ factory EdgeBoxes ({
245+ double alpha = 0.65 ,
246+ double beta = 0.75 ,
247+ double eta = 1 ,
248+ double minScore = 0.01 ,
249+ int maxBoxes = 10000 ,
250+ double edgeMinMag = 0.1 ,
251+ double edgeMergeThr = 0.5 ,
252+ double clusterMinMag = 0.5 ,
253+ double maxAspectRatio = 3 ,
254+ double minBoxArea = 1000 ,
255+ double gamma = 2 ,
256+ double kappa = 1.5 ,
257+ }) {
258+ final p = calloc< cvg.EdgeBoxes > ()
259+ ..ref.alpha = alpha
260+ ..ref.beta = beta
261+ ..ref.eta = eta
262+ ..ref.minScore = minScore
263+ ..ref.maxBoxes = maxBoxes
264+ ..ref.edgeMinMag = edgeMinMag
265+ ..ref.edgeMergeThr = edgeMergeThr
266+ ..ref.clusterMinMag = clusterMinMag
267+ ..ref.maxAspectRatio = maxAspectRatio
268+ ..ref.minBoxArea = minBoxArea
269+ ..ref.gamma = gamma
270+ ..ref.kappa = kappa;
271+
272+ return EdgeBoxes .fromPointer (p);
273+ }
274+
275+ /// Returns array containing proposal boxes.
276+ ///
277+ /// https://docs.opencv.org/4.x/dd/d65/classcv_1_1ximgproc_1_1EdgeBoxes.html#a822e422556f8103d01a0a4db6815f0e5
278+ (VecRect boxes, VecFloat scores) getBoundingBoxes (InputArray edge_map, InputArray orientation_map) {
279+ final pvr = calloc< cvg.VecRect > ();
280+ final pvf = calloc< cvg.VecFloat > ();
281+ cvRun (() => CFFI .ximgproc_EdgeBoxes_getBoundingBoxes (ref, edge_map.ref, orientation_map.ref, pvr, pvf));
282+ return (VecRect .fromPointer (pvr), VecFloat .fromPointer (pvf));
283+ }
284+
285+ double get alpha => ref.alpha;
286+ set alpha (double value) => ref.alpha = value;
287+
288+ double get beta => ref.beta;
289+ set beta (double value) => ref.beta = value;
290+
291+ double get eta => ref.eta;
292+ set eta (double value) => ref.eta = value;
293+
294+ double get minScore => ref.minScore;
295+ set minScore (double value) => ref.minScore = value;
296+
297+ int get maxBoxes => ref.maxBoxes;
298+ set maxBoxes (int value) => ref.maxBoxes = value;
299+
300+ double get edgeMinMag => ref.edgeMinMag;
301+ set edgeMinMag (double value) => ref.edgeMinMag = value;
302+
303+ double get edgeMergeThr => ref.edgeMergeThr;
304+ set edgeMergeThr (double value) => ref.edgeMergeThr = value;
305+
306+ double get clusterMinMag => ref.clusterMinMag;
307+ set clusterMinMag (double value) => ref.clusterMinMag = value;
308+
309+ double get maxAspectRatio => ref.maxAspectRatio;
310+ set maxAspectRatio (double value) => ref.maxAspectRatio = value;
311+
312+ double get minBoxArea => ref.minBoxArea;
313+ set minBoxArea (double value) => ref.minBoxArea = value;
314+
315+ double get gamma => ref.gamma;
316+ set gamma (double value) => ref.gamma = value;
317+
318+ double get kappa => ref.kappa;
319+ set kappa (double value) => ref.kappa = value;
320+
321+ static final finalizer = ffi.NativeFinalizer (calloc.nativeFree);
322+
323+ @override
324+ List <num > get props => [
325+ alpha,
326+ beta,
327+ eta,
328+ minScore,
329+ maxBoxes,
330+ edgeMinMag,
331+ edgeMergeThr,
332+ clusterMinMag,
333+ maxAspectRatio,
334+ minBoxArea,
335+ gamma,
336+ kappa,
337+ ];
338+
339+ @override
340+ cvg.EdgeBoxes get ref => ptr.ref;
341+ }
342+
236343class RFFeatureGetter extends CvStruct <cvg.RFFeatureGetter > {
237344 RFFeatureGetter .fromPointer (super .ptr, [bool attach = true ]) : super .fromPointer () {
238345 if (attach) finalizer.attach (this , ptr.cast (), detach: this );
@@ -244,9 +351,6 @@ class RFFeatureGetter extends CvStruct<cvg.RFFeatureGetter> {
244351 return RFFeatureGetter .fromPointer (p);
245352 }
246353
247- static final finalizer =
248- OcvFinalizer <cvg.RFFeatureGetterPtr >(CFFI .addresses.ximgproc_RFFeatureGetter_Close);
249-
250354 Mat getFeatures (InputArray src, int gnrmRad, int gsmthRad, int shrink, int outNum, int gradNum) {
251355 final p = calloc< cvg.Mat > ();
252356 cvRun (
@@ -274,6 +378,14 @@ class RFFeatureGetter extends CvStruct<cvg.RFFeatureGetter> {
274378 return rval;
275379 }
276380
381+ static final finalizer =
382+ OcvFinalizer <cvg.RFFeatureGetterPtr >(CFFI .addresses.ximgproc_RFFeatureGetter_Close);
383+
384+ void dispose () {
385+ finalizer.detach (this );
386+ CFFI .ximgproc_RFFeatureGetter_Close (ptr);
387+ }
388+
277389 @override
278390 List <int > get props => [ptr.address];
279391
@@ -350,6 +462,11 @@ class StructuredEdgeDetection extends CvStruct<cvg.StructuredEdgeDetection> {
350462 static final finalizer =
351463 OcvFinalizer <cvg.StructuredEdgeDetectionPtr >(CFFI .addresses.ximgproc_StructuredEdgeDetection_Close);
352464
465+ void dispose () {
466+ finalizer.detach (this );
467+ CFFI .ximgproc_StructuredEdgeDetection_Close (ptr);
468+ }
469+
353470 @override
354471 List <int > get props => [ptr.address];
355472
@@ -412,6 +529,11 @@ class GraphSegmentation extends CvStruct<cvg.GraphSegmentation> {
412529 static final finalizer =
413530 OcvFinalizer <cvg.GraphSegmentationPtr >(CFFI .addresses.ximgproc_GraphSegmentation_Close);
414531
532+ void dispose () {
533+ finalizer.detach (this );
534+ CFFI .ximgproc_GraphSegmentation_Close (ptr);
535+ }
536+
415537 @override
416538 List <int > get props => [ptr.address];
417539
@@ -586,6 +708,11 @@ class EdgeDrawing extends CvStruct<cvg.EdgeDrawing> {
586708
587709 static final finalizer = OcvFinalizer <cvg.EdgeDrawingPtr >(CFFI .addresses.ximgproc_EdgeDrawing_Close);
588710
711+ void dispose () {
712+ finalizer.detach (this );
713+ CFFI .ximgproc_EdgeDrawing_Close (ptr);
714+ }
715+
589716 @override
590717 List <int > get props => [ptr.address];
591718
0 commit comments