]> rtime.felk.cvut.cz Git - opencv.git/blobdiff - opencv/src/cv/cvmser.cpp
added const in MSER::operator()
[opencv.git] / opencv / src / cv / cvmser.cpp
index 34a0a17b1db63f8c8601ae23cbbcc7619c590817..11a2346204eddb043174ffc7badd9fd9fb4cb86b 100644 (file)
 #include "_cv.h"
 
 #define TABLE_SIZE 400
-static double chitab1[]={0,  9.86678e-06,  3.94675e-05,  8.88034e-05,
-                  0.000157876,  0.000246689,  0.000355245,  0.000483549,
-                  0.000631605,  0.00079942,  0.000987,  0.00119435,
-                  0.00142149,  0.00166841,  0.00193513,  0.00222166,
-                  0.00252802,  0.0028542,  0.00320024,  0.00356613,
-                  0.0039519,  0.00435756,  0.00478312,  0.00522861,
-                  0.00569404,  0.00617943,  0.00668479,  0.00721016,
-                  0.00775554,  0.00832097,  0.00890646,  0.00951204,
-                  0.0101377,  0.0107836,  0.0114495,  0.0121357,
-                  0.0128421,  0.0135688,  0.0143157,  0.0150829,
-                  0.0158704,  0.0166784,  0.0175067,  0.0183554,
-                  0.0192247,  0.0201144,  0.0210247,  0.0219555,
-                  0.022907,  0.0238791,  0.0248719,  0.0258854,
-                  0.0269197,  0.0279749,  0.0290509,  0.0301478,
-                  0.0312656,  0.0324045,  0.0335643,  0.0347453,
-                  0.0359474,  0.0371708,  0.0384153,  0.0396812,
-                  0.0409684,  0.042277,  0.043607,  0.0449586,
-                  0.0463317,  0.0477265,  0.0491429,  0.0505811,
-                  0.0520411,  0.053523,  0.0550268,  0.0565526,
-                  0.0581005,  0.0596705,  0.0612627,  0.0628771,
-                  0.0645139,  0.0661731,  0.0678548,  0.069559,
-                  0.0712859,  0.0730354,  0.0748078,  0.076603,
-                  0.0784211,  0.0802622,  0.0821265,  0.0840139,
-                  0.0859246,  0.0878587,  0.0898161,  0.0917972,
-                  0.0938018,  0.0958301,  0.0978823,  0.0999583,
-                  0.102058,  0.104182,  0.106331,  0.108503,
-                  0.1107,  0.112922,  0.115168,  0.117438,
-                  0.119734,  0.122054,  0.1244,  0.12677,
-                  0.129166,  0.131587,  0.134034,  0.136506,
-                  0.139004,  0.141528,  0.144077,  0.146653,
-                  0.149255,  0.151884,  0.154538,  0.15722,
-                  0.159928,  0.162663,  0.165425,  0.168214,
-                  0.17103,  0.173874,  0.176745,  0.179644,
-                  0.182571,  0.185526,  0.188509,  0.19152,
-                  0.19456,  0.197629,  0.200726,  0.203852,
-                  0.207008,  0.210193,  0.213407,  0.21665,
-                  0.219924,  0.223228,  0.226562,  0.229926,
-                  0.23332,  0.236746,  0.240202,  0.24369,
-                  0.247208,  0.250759,  0.254341,  0.257955,
-                  0.261601,  0.265279,  0.26899,  0.272734,
-                  0.276511,  0.28032,  0.284164,  0.288041,
-                  0.291952,  0.295897,  0.299876,  0.303891,
-                  0.307939,  0.312024,  0.316143,  0.320298,
-                  0.324489,  0.328716,  0.33298,  0.33728,
-                  0.341617,  0.345992,  0.350404,  0.354854,
-                  0.359341,  0.363868,  0.368433,  0.373037,
-                  0.377681,  0.382364,  0.387087,  0.39185,
-                  0.396655,  0.4015,  0.406386,  0.411314,
-                  0.416284,  0.421297,  0.426352,  0.43145,
-                  0.436592,  0.441778,  0.447008,  0.452282,
-                  0.457602,  0.462967,  0.468378,  0.473835,
-                  0.479339,  0.48489,  0.490489,  0.496136,
-                  0.501831,  0.507575,  0.513369,  0.519212,
-                  0.525106,  0.531051,  0.537047,  0.543095,
-                  0.549195,  0.555349,  0.561556,  0.567817,
-                  0.574132,  0.580503,  0.586929,  0.593412,
-                  0.599952,  0.606549,  0.613204,  0.619918,
-                  0.626692,  0.633525,  0.64042,  0.647375,
-                  0.654393,  0.661474,  0.668618,  0.675827,
-                  0.6831,  0.690439,  0.697845,  0.705318,
-                  0.712859,  0.720469,  0.728149,  0.7359,
-                  0.743722,  0.751617,  0.759584,  0.767626,
-                  0.775743,  0.783937,  0.792207,  0.800556,
-                  0.808983,  0.817491,  0.82608,  0.834751,
-                  0.843506,  0.852345,  0.86127,  0.870282,
-                  0.879382,  0.888572,  0.897852,  0.907224,
-                  0.916689,  0.926249,  0.935904,  0.945658,
-                  0.95551,  0.965462,  0.975516,  0.985674,
-                  0.995937,  1.00631,  1.01678,  1.02737,
-                  1.03807,  1.04888,  1.05981,  1.07086,
-                  1.08202,  1.09331,  1.10472,  1.11625,
-                  1.12791,  1.13971,  1.15163,  1.16369,
-                  1.17588,  1.18822,  1.20069,  1.21331,
-                  1.22608,  1.239,  1.25207,  1.26529,
-                  1.27868,  1.29222,  1.30593,  1.31981,
-                  1.33386,  1.34808,  1.36248,  1.37707,
-                  1.39184,  1.4068,  1.42195,  1.4373,
-                  1.45286,  1.46862,  1.48459,  1.50078,
-                  1.51719,  1.53383,  1.5507,  1.5678,
-                  1.58515,  1.60275,  1.6206,  1.63872,
-                  1.6571,  1.67576,  1.6947,  1.71393,
-                  1.73346,  1.75329,  1.77344,  1.7939,
-                  1.8147,  1.83585,  1.85734,  1.87919,
-                  1.90142,  1.92403,  1.94703,  1.97044,
-                  1.99427,  2.01854,  2.04325,  2.06843,
-                  2.09409,  2.12024,  2.14691,  2.17411,
-                  2.20186,  2.23018,  2.25909,  2.28862,
-                  2.31879,  2.34962,  2.38115,  2.4134,
-                  2.4464,  2.48019,  2.5148,  2.55027,
-                  2.58663,  2.62393,  2.66223,  2.70155,
-                  2.74197,  2.78353,  2.8263,  2.87034,
-                  2.91574,  2.96256,  3.01089,  3.06083,
-                  3.11249,  3.16597,  3.22139,  3.27891,
-                  3.33867,  3.40085,  3.46563,  3.53323,
-                  3.6039,  3.67791,  3.75558,  3.83726,
-                  3.92338,  4.01442,  4.11095,  4.21364,
-                  4.3233,  4.4409,  4.56764,  4.70499,
-                  4.85482,  5.01955,  5.20235,  5.40752,
-                  5.64113,  5.91206,  6.2341,  6.63044,
-                  7.14465,  7.87491,  9.13601,  400 };
 
 static double chitab3[]={0,  0.0150057,  0.0239478,  0.0315227,
                   0.0383427,  0.0446605,  0.0506115,  0.0562786,
@@ -641,7 +541,7 @@ icvExtractMSER_8UC1_Pass( int* ioptr,
                        }
                        *imgptr += 0x10000;
                }
-               int i = imgptr-ioptr;
+               int i = (int)(imgptr-ioptr);
                ptsptr->pt = cvPoint( i&stepmask, i>>stepgap );
                // get the current location
                icvAccumulateMSERComp( comptr, ptsptr );
@@ -1339,14 +1239,10 @@ cvExtractMSER( CvArr* _img,
        CvMat maskhdr, *mask = _mask ? cvGetMat( _mask, &maskhdr ) : 0;
        CvSeq* contours = 0;
 
-       CV_FUNCNAME( "cvExtractMSER" );
-
-       __BEGIN__;
-
-       CV_ASSERT(src != 0);
-       CV_ASSERT(CV_MAT_TYPE(src->type) == CV_8UC1 || CV_MAT_TYPE(src->type) == CV_8UC3);
-       CV_ASSERT(mask == 0 || (CV_ARE_SIZES_EQ(src, mask) && CV_MAT_TYPE(mask->type) == CV_8UC1));
-       CV_ASSERT(storage != 0);
+       CV_Assert(src != 0);
+       CV_Assert(CV_MAT_TYPE(src->type) == CV_8UC1 || CV_MAT_TYPE(src->type) == CV_8UC3);
+       CV_Assert(mask == 0 || (CV_ARE_SIZES_EQ(src, mask) && CV_MAT_TYPE(mask->type) == CV_8UC1));
+       CV_Assert(storage != 0);
 
        contours = *_contours = cvCreateSeq( 0, sizeof(CvSeq), sizeof(CvSeq*), storage );
 
@@ -1362,6 +1258,39 @@ cvExtractMSER( CvArr* _img,
                        icvExtractMSER_8UC3( src, mask, contours, storage, params );
                        break;
        }
+}
+
+
+namespace cv
+{
+
+MSER::MSER()
+{
+    *(CvMSERParams*)this = cvMSERParams();
+}
+
+MSER::MSER( int _delta, int _min_area, int _max_area,
+      float _max_variation, float _min_diversity,
+      int _max_evolution, double _area_threshold,
+      double _min_margin, int _edge_blur_size )
+{
+    *(CvMSERParams*)this = cvMSERParams(_delta, _min_area, _max_area, _max_variation,
+        _min_diversity, _max_evolution, _area_threshold, _min_margin, _edge_blur_size);
+}
+
+void MSER::operator()( const Mat& image, vector<vector<Point> >& dstcontours, const Mat& mask ) const
+{
+    CvMat _image = image, _mask, *pmask = 0;
+    if( mask.data )
+        pmask = &(_mask = mask);
+    MemStorage storage(cvCreateMemStorage(0));
+    Seq<CvSeq*> contours;
+    cvExtractMSER( &_image, pmask, &contours.seq, storage, *(const CvMSERParams*)this );
+    SeqIterator<CvSeq*> it = contours.begin();
+    size_t i, ncontours = contours.size();
+    dstcontours.resize(ncontours);
+    for( i = 0; i < ncontours; i++, ++it )
+        Seq<Point>(*it).copyTo(dstcontours[i]);
+}
 
-       __END__;
 }