c++ - OpenCV 3.0.0 MSER 二进制掩码

标签 c++ opencv contour matlab-cvst mser

我正在尝试使用 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);
    }
}

这是结果: OPENCV MSER

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

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

最佳答案

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

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

关于c++ - OpenCV 3.0.0 MSER 二进制掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28515084/

相关文章:

c++模板函数用const参数覆盖参数推导

c++ - 为什么它打破了初始化列表的顺序规则时会起作用

java - 使用 OpenCV SURF 对多个图像进行图像匹配

android - OpenCV 管理器无法检测到 Galaxy S5 中的硬件

python-2.7 - 在 OpenCV 2.4 中处理轮廓和边界矩形 - python 2.7

python - 如何在 OpenCV 中将边缘转换为轮廓

c++ - 局部变量与数组访问

C++ 字符串声明

c++ - 通过串口发送字符串

matlab - 颜色轮廓不同于 pcolor