最近,我遇到了有关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;
}
我糊涂了。
我也期待这种文本检测的新方法。
如果可以回答,我表示感谢。
答案 0 :(得分:0)
黑色背景上有白色文字。一些MSER实现在白色背景上寻找黑色。
尝试反转图像并重试。