推 amidofun:感謝大大 06/10 01:45
※ 引述《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