2015-07-13 2 views
0

Я новичок в EmguCV и OpenCV. Я хочу обнаружить текст Регионы из изображения с помощью EmguCV.Обнаружение текстовых областей с помощью изображения с помощью EmguCV

Уже есть некоторые решения, размещенные на стеке с использованием OpenCV.

  1. Extracting text OpenCV

Но не смог преобразовать этот код OpenCV в EmguCV.

+1

См [текст обнаружения] (http://docs.opencv.org/3.0-beta/modules/text/doc/erfilter.html). Возможно, вам понадобится установить последнюю версию EmguCV – Miki

ответ

2

Это прямое преобразование принятого ответа в ссылку, которую вы предоставили в C# с EMGU. Возможно, вам придется внести некоторые изменения со своей немного другой реализации, но это должно заставить вас начать. Я также сомневаюсь, что он очень надежный, поэтому в зависимости от вашего конкретного использования он может оказаться непригодным. Удачи.

public List<Rectangle> detectLetters(Image<Bgr, Byte> img) 
{ 
    List<Rectangle> rects = new List<Rectangle>(); 
    Image<Gray, Single> img_sobel; 
    Image<Gray, Byte> img_gray, img_threshold; 
    img_gray = img.Convert<Gray, Byte>(); 
    img_sobel = img_gray.Sobel(1,0,3); 
    img_threshold = new Image<Gray, byte>(img_sobel.Size); 
    CvInvoke.cvThreshold(img_sobel.Convert<Gray, Byte>(), img_threshold, 0, 255, Emgu.CV.CvEnum.THRESH.CV_THRESH_OTSU); 
    StructuringElementEx element = new StructuringElementEx(3, 17, 1, 6, Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT); 
    CvInvoke.cvMorphologyEx(img_threshold, img_threshold, IntPtr.Zero, element, Emgu.CV.CvEnum.CV_MORPH_OP.CV_MOP_CLOSE, 1); 
    for (Contour<System.Drawing.Point> contours = img_threshold.FindContours(); contours != null; contours = contours.HNext) 
    { 
     if (contours.Area > 100) 
     { 
      Contour<System.Drawing.Point> contours_poly = contours.ApproxPoly(3); 
      rects.Add(new Rectangle(contours_poly.BoundingRectangle.X, contours_poly.BoundingRectangle.Y, contours_poly.BoundingRectangle.Width, contours_poly.BoundingRectangle.Height)); 
     } 
    } 
    return rects; 
} 

Использование:

Image<Bgr, Byte> img = new Image<Bgr, Byte>("VfDfJ.png"); 
List<Rectangle> rects = detectLetters(img); 
for (int i=0;i<rects.Count();i++) 
    img.Draw(rects.ElementAt<Rectangle>(i),new Bgr(0,255,0),3); 
CvInvoke.cvShowImage("Display", img.Ptr); 
CvInvoke.cvWaitKey(0); 
CvInvoke.cvDestroyWindow("Display"); 
Смежные вопросы