Перейти к содержимому
Compvision.ru

Борода22

Пользователи
  • Количество публикаций

    21
  • Зарегистрирован

  • Посещение

Репутация

1 Новичек

О Борода22

  • Звание
    Бывалый
  1. Премного благодарен, уважаемый, получилось выровнить изображение.
  2. @Smorodov, премного благодарен. Как я понял, параметры dy, dx - разность координат точек отрезка (линии) ?
  3. Прописал вот такой код: var lines = Cv2.HoughLinesP(thresh_img, 1, Math.PI / 180, 200, 150, 30); LineSegmentPoint max_line = new LineSegmentPoint(); for (int i = 0; i < lines.Length; i++) { // получаем максимальную длинную прямую if (lines[i].Length() > max_line.Length()) { max_line = lines[i]; } Cv2.Line(original_img, lines[i].P1, lines[i].P2, new Scalar(0, 0, 250), 2); } // выводим линию максимальной длины Cv2.Line(original_img, max_line.P1, max_line.P2, new Scalar(255, 0, 0), 3); отображает вот в таком виде (синяя линия - это максимально прямая линия) Как теперь определить угол поворота по синей линии ? Это необходимо для выравнивания скана документа. Как я понял, угол можно получить с помощью HoughLines(), можно ли как-то получит угол по LineSegmentPoint ?
  4. Да, спасибо, я уже понял методом "тыка" что представляют эти методы Хорошо, попробую. Просто я линии, которые нашел с помощью HoughLines(), выводил на оригинал изображения. С вашим примером обязательно попробую.
  5. Все-таки видимо нужно идти другим путем. Убрать все прямые вертикальные и горизонтальные линии, т.к. они мешают для утолщения. Написал (поправил чужой код) вот такой код для поиска и отображения прямых линий: Mat original_img = new Mat(PathToImage); Mat gray_img = original_img.CvtColor(ColorConversionCodes.BGR2GRAY); Mat thresh_img = gray_img.Threshold(0, 255, ThresholdTypes.Otsu | ThresholdTypes.BinaryInv); var lines = Cv2.HoughLines(thresh_img, 200, Math.PI/180, 2); for(int x = 0; x < lines.Count(); x++) { float rho = lines[x].Rho; float theta = lines[x].Theta; double a = Math.Cos(theta); double b = Math.Sin(theta); double x0 = a * rho; double y0 = b * rho; LineSegmentPoint point = new LineSegmentPoint(); point.P1.X = (int)Math.Round(x0 + (1000 * (-b))); point.P1.Y = (int)Math.Round(y0 + (1000 * (a))); point.P2.X = (int)Math.Round(x0 - (1000 * (-b))); point.P2.Y = (int)Math.Round(y0 - (1000 * (a))); Cv2.Line(original_img, point.P1, point.P2, new Scalar(0, 200, 20)); } Но линии рисуются вообще не правильно (рисуются диагоналями, под углом), я так понимаю, что накосячил где-то в преобразовании координат ? И что это за магические числа в виде 1000 ?
  6. @Smorodov, Приветствую, уважаемый! А можно пример в виде используемых функций ? Простите уж за такое наглое пожелание
  7. Вот я обработал контуры, с помощью чего можно их объединить?
  8. Это просто жуть, тут не то что бутылка нужна, нужно заново родиться, и впитывать это с молоком матери
  9. За что отвечает функция GetStructuringElement() и что за параметры используются ?
  10. Все-таки рано радовался. На "эталонном" документе все отрабатывает как нужно, т.к. я распознаю заранее фиксированные области Но предстоит работать со сканированными изображениями, причем, сама форма документа может отличаться от "эталонного" в визуальном плане. Поэтому работа с OpenCV, думаю, все-таки предстоит. Нужно как-то определять границы текста, далее его "вырезать" и скармливать tesseract-у. Походу возвращаюсь к сообщению. Как корректно распознать области(границы) с текстом ?
  11. Да, кажется все нормально, спасибо большое!
  12. Выставил в SingleBlock и все корректно распозналось
  13. Я использую вот такой код: var img = Pix.LoadFromFile(pathToImage); var page = tessEngine.Process(img); string result = page.GetText(); page.Dispose(); Для этого нужно использовать метод Scale() ? Как я понял, нужно для page segmentation mode установить режим single char. Как это сделать ? Установил свойство DefaultPageSegMode = PageSegMode.SingleChar, теперь распознает, но не корректно распознает строки
  14. И вот столкнулся с проблемой. Не хочет распознавать одиночные символы. Например, вот как на скрине. Что можно попытаться предпринять ? Увеличить изображение ? Причем, если "дописать" цифру слева или справа, то распознает корректно.
  15. Использовал tesseract, результаты вполне пригодны.
×