1
最近,我有一個關於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是否有限制/限制?
- 它需要一些預處理?什麼樣的? 像形態學。
我也期待這種類型的文本檢測的新方法。
我很感激它,如果它可以回答。
如果您提供您嘗試使用的代碼,我們也會嘗試查看結果 – sturkmen
@sturkmen感謝您的回覆。之後,我試了幾天,發現這個[鏈接](https://stackoverflow.com/questions/23506105/extracting-text-opencv/23672571#23672571)。它的工作原理似乎比MSER更好。順便說一句我添加了我的代碼。 – leonmy