OpenCV 3.0.0 MSER二进制掩码

Mar*_*ona 9 c++ opencv mser matlab-cvst opencv-drawcontour

我试图在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是结果: OPENCV MSER

问题是非凸区域由穿过实际MSER区域的线填充.我想像我从MATLAB获得的区域像素列表detectMSERFeatures: MATLAB MSER

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

Mar*_*ona 10

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

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)