2015-02-14 28 views
9

Bir resimdeki metin bölgelerini ayıklamak için OpenCV 3.0.0 beta'da MSER algoritmasını kullanmaya çalışıyorum. Sonunda, tespit edilen MSER bölgeleriyle ikili bir maskeye ihtiyacım var, ancak algoritma sadece konturlar sağlıyor. Bu konturları çizmeye çalıştım ama beklenen sonucu alamıyorum. OpenCV 3.0.0 MSER İkili Maskesi

Bu

kullanmak kodudur: OPENCV MSER

sorun dışbükey bölgeler gerçek Mser bölgeden geçen çizgilerle dolu olmasıdır:

void mserExtractor (const Mat& image, Mat& mserOutMask){ 
    Ptr<MSER> mserExtractor = MSER::create(); 

    vector<vector<cv::Point>> mserContours; 
    vector<cv::Rect> mserBbox; 
    mserExtractor->detectRegions(image, mserContours, mserBbox); 

    for(int i = 0; i<mserContours.size(); i++) 
    { 
     drawContours(mserOutMask, mserContours, i, Scalar(255, 255, 255), 4); 
    } 
} 

Bu sonucudur. MATLAB MSER

Herhangi fikirleri nasıl hatlarına gelen dolu bölgeyi almak için (veya başka yollarla Mser maskesi almak için): Ben MATLAB detectMSERFeatures aldığım gibi bölgedeki piksellerin sadece listesini istersiniz?

cevap

10

Çözümü buldum! Sadece tüm noktaların üzerine gelin ve onları çizin!

void mserExtractor (const Mat& image, Mat& mserOutMask){ 
    Ptr<MSER> mserExtractor = MSER::create(); 

    vector<vector<cv::Point>> mserContours; 
    vector<KeyPoint> mserKeypoint; 
    vector<cv::Rect> mserBbox; 
    mserExtractor->detectRegions(image, mserContours, mserBbox); 

    for (vector<cv::Point> v : mserContours){ 
     for (cv::Point p : v){ 
      mserOutMask.at<uchar>(p.y, p.x) = 255; 
     } 
    } 
}