首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV 3.0.0 MSER二进制掩码

OpenCV 3.0.0 MSER二进制掩码
EN

Stack Overflow用户
提问于 2015-02-14 19:18:57
回答 1查看 8.2K关注 0票数 9

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

这是我使用的代码:

代码语言:javascript
复制
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掩码)吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-14 21:50:03

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

代码语言:javascript
复制
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;
        }
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28515084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档