看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《amidofun ()》之銘言: : ※ 引述《amidofun ()》之銘言: : : 我想問這個cv::MSER : : 其中的operator,如下: : : void operator()( const Mat& image, vector<vector<Point> >& msers, const Mat& : : mask ) const; : : 如何使用??? : : 我又試著使用cv::MserFeatureDetector : : Wrapping class for feature detection using cv::MSER class : : 其中的 : : void FeatureDetector::detect( const Mat& image, vector<KeyPoint>& keypoints, : : const Mat& mask=Mat() ) const; : : 但是第二參數是不同型態的!? : 我找了定義, 如下: : /*! Maximal Stable Extremal Regions class. The class implements MSER : algorithm introduced by J. Matas. Unlike SIFT, SURF and many other detectors : in OpenCV, this is salient region detector, not the salient point detector. : It returns the regions, each of those is encoded as a contour.*/ : class CV_EXPORTS_W MSER : public CvMSERParams : { : public: : //! the default constructor : CV_WRAP MSER(); : //! the full constructor : CV_WRAP MSER( int _delta, int _min_area, int _max_area, : double _max_variation, double _min_diversity, : int _max_evolution, double _area_threshold, : double _min_margin, int _edge_blur_size ); : //! the operator that extracts the MSERs from the image or the specific : part of it : CV_WRAP_AS(detect) void operator()( const Mat& image, : CV_OUT vector<vector<Point> >& msers, const Mat& mask ) const; : }; : 但看了還是不知道如何使用阿= = ? : 請大大指點一下寫法 有沒有可能MSER C++部分還沒弄好 基本的用法是 MSER mser; vector< vector<Point> > msers; mser(image, msers, mask); 這樣 msers 裡就會是偵測到的 feature "region" region 是用 vector<Point> 裡的 points 組成 contour 至於 wrapping class 的原始碼如下: void MserFeatureDetector::detectImpl( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask ) const { vector<vector<Point> > msers; mser(image, msers, mask); vector<vector<Point> >::const_iterator contour_it = msers.begin(); for( ; contour_it != msers.end(); ++contour_it ) { // TODO check transformation from MSER region to KeyPoint RotatedRect rect = fitEllipse(Mat(*contour_it)); float diam = sqrt(rect.size.height*rect.size.width); if( diam > std::numeric_limits<float>::epsilon() ) keypoints.push_back( KeyPoint( rect.center, diam, rect.angle) ); } } 簡單的說,得到 feature region 之後,用某個方式把它轉成 feature point 所以看你的需求 1. 要 feature regions 的話就直接用 MSER 2. 要 feature points a. 可接受 opencv 的轉換方法的話就用 MserFeatureDetector b. 不然就用 MSER 然後自己轉 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.49
amidofun:感謝大大 06/10 01:45