OpenCV MSER не обнаруживает мой текст

Недавно у меня возникла проблема с обнаружением OpenCV MSER.
Текст на изображении ниже не извлечен правильно.

Ссылка на изображение - обнаружение mser не работает

После закрытия морфологии результат кажется правильным.

Код:

int main()
{
    // load
    cv::Mat sourceImage = cv::imread("F:\\Documents\\mQvnv.jpg");
    // convert
    cv::Mat grayImage;
    cv::cvtColor(sourceImage, grayImage, CV_BGR2GRAY);
    // morph close
    cv::Mat morphImage;
    cv::Mat morphKernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(2 * 1 + 1, 1), cv::Point(-1, -1));
    cv::morphologyEx(grayImage, morphImage, cv::MORPH_CLOSE, morphKernel);
    // mser
    std::vector<std::vector<cv::Point> > contours;
    cv::MSER ms;
    ms(morphImage, contours);
    // show
    cv::Mat finalImage = sourceImage.clone();
    for (int idx = 0; idx < contours.size(); idx++)
    {
        // filter
        cv::RotatedRect minRect = cv::minAreaRect(contours[idx]);
        if (minRect.size.height < 4. || minRect.size.width < 4.) continue;// filter 1

        double hwr = minRect.size.height / minRect.size.width;
        if (hwr < 1.) hwr = minRect.size.width / minRect.size.height;
        if (hwr > 10.) continue;// filter 2

        double contourArea = cv::contourArea(contours[idx]);
        double rectArea = minRect.size.area();
        double areaRatio = contourArea / rectArea;
        if (areaRatio < 0.35) continue;// filter 3

        // draw rotated rectangle
        cv::Point2f rect_points[4]; minRect.points(rect_points);
        for (int j = 0; j < 4; j++)
            cv::line(finalImage, rect_points[j], rect_points[(j + 1) % 4], cv::Scalar(0, 0, 255));
    }

    cv::imshow("MSER Demo", finalImage);
    //
    cv::waitKey(0);
    return 0;
}


Я не совсем понимаю.

  • Есть ли у MSER ограничения / ограничения?
  • Нужна ли предварительная обработка? Какого рода? Как морфология.

Я также с нетерпением жду нового метода для этого типа обнаружения текста.

Я ценю это, если можно было ответить.

1 ответ

У вас есть белый текст на черном фоне. Некоторые реализации MSER выглядят черным на белом фоне.

Попробуйте перевернуть изображение и попробуйте снова.

Другие вопросы по тегам