【问题标题】:OpenCV 3.0.0 MSER Binary MaskOpenCV 3.0.0 MSER 二进制掩码
【发布时间】:2015-04-15 09:48:56
【问题描述】:

我正在尝试使用 OpenCV 3.0.0 beta 中的 MSER 算法从图像中提取文本区域。最后,我需要一个带有检测到的 MSER 区域的二进制掩码,但该算法仅提供轮廓。我尝试绘制这些轮廓,但没有得到预期的结果。

这是我使用的代码:

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);
    }
}

这是结果:

问题在于非凸区域被穿过实际 MSER 区域的线填充。我只想要区域中的像素列表,就像我从 MATLAB detectMSERFeatures 获得的那样:

任何想法如何从轮廓中获取填充区域(或以其他方式获取 MSER 掩码)?

【问题讨论】:

    标签: c++ opencv matlab-cvst mser opencv-drawcontour


    【解决方案1】:

    我找到了解决方案!只需循环所有点并绘制它们!

    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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 1970-01-01
      • 2017-05-26
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2017-03-19
      • 1970-01-01
      相关资源
      最近更新 更多