OpenCV MSER не обнаруживает мой текст
Недавно у меня возникла проблема с обнаружением OpenCV 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 выглядят черным на белом фоне.
Попробуйте перевернуть изображение и попробуйте снова.