Jump to content
Compvision.ru

All Activity

This stream auto-updates     

  1. Yesterday
  2. Earlier
  3. Премного благодарен, уважаемый, получилось выровнить изображение.
  4. @Smorodov, премного благодарен. Как я понял, параметры dy, dx - разность координат точек отрезка (линии) ?
  5. Ну если знаем 2 точки то alpha=atan2(dy,dx)
  6. Прописал вот такой код: 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 ?
  7. Да, спасибо, я уже понял методом "тыка" что представляют эти методы Хорошо, попробую. Просто я линии, которые нашел с помощью HoughLines(), выводил на оригинал изображения. С вашим примером обязательно попробую.
  8. Коррекция кадров видео

    Спасибо. Нашёл
  9. Коррекция кадров видео

    Большое спасибо. Совсем даже не поздно. У нас всё очень неспешно происходит... Но не совсем понял, по какой книге это сделано, вроде ссылка на книгу есть, но что-то не переходит...
  10. Коррекция кадров видео

    Поздно но наткнулся на пакет для решения подобных задач: https://github.com/cruxopen/openISP
  11. Извиняюсь что запоздал с ответом, был в отъезде. Сишный пример из стандартного набора: #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> using namespace cv; using namespace std; int main(int argc, char** argv) { Mat src, dst, color_dst; if( argc != 2 || !(src=imread(argv[1], 0)).data) return -1; Canny( src, dst, 50, 200, 3 ); cvtColor( dst, color_dst, COLOR_GRAY2BGR ); vector<Vec4i> lines; HoughLinesP( dst, lines, 1, CV_PI/180, 80, 30, 10 ); for( size_t i = 0; i < lines.size(); i++ ) { line( color_dst, Point(lines[i][0], lines[i][1]), Point( lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8 ); } namedWindow( "Source", 1 ); imshow( "Source", src ); namedWindow( "Detected Lines", 1 ); imshow( "Detected Lines", color_dst ); waitKey(0); return 0; } По поводу морфологических операций, cv::dilate затем cv::erode. Для детектора линий, нужно белое изображение на черном фоне.
  12. Все-таки видимо нужно идти другим путем. Убрать все прямые вертикальные и горизонтальные линии, т.к. они мешают для утолщения. Написал (поправил чужой код) вот такой код для поиска и отображения прямых линий: 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 ?
  13. @Smorodov, Приветствую, уважаемый! А можно пример в виде используемых функций ? Простите уж за такое наглое пожелание
  14. dilate - утолщит все с сольет в блоки. Структурный элемент взять высотой с символ, шириной примерно в 1.5 - 2.5 от ширины символа. после него erode с тем же ядром, чтобы вернуть размеры блоков. Повторить поиск контуров.
  15. Вот я обработал контуры, с помощью чего можно их объединить?
  16. Это просто жуть, тут не то что бутылка нужна, нужно заново родиться, и впитывать это с молоком матери
  17. На английском конечно, но по теме ) : https://www.pyimagesearch.com/2014/09/01/build-kick-ass-mobile-document-scanner-just-5-minutes/ GetStructuringElement создает структурный элемент для морфологических операций (эрозия, дилатация, открытие, закрытие .... ) элемент представляет собой маленький шаблончик в виде прямоугольника заполненного единицами, реже используется эллипс, крест, и т.д. Посмотрите про морфологические операции и все станет ясно. https://ru.wikipedia.org/wiki/Математическая_морфология
  18. За что отвечает функция GetStructuringElement() и что за параметры используются ?
  19. Все-таки рано радовался. На "эталонном" документе все отрабатывает как нужно, т.к. я распознаю заранее фиксированные области Но предстоит работать со сканированными изображениями, причем, сама форма документа может отличаться от "эталонного" в визуальном плане. Поэтому работа с OpenCV, думаю, все-таки предстоит. Нужно как-то определять границы текста, далее его "вырезать" и скармливать tesseract-у. Походу возвращаюсь к сообщению. Как корректно распознать области(границы) с текстом ?
  20. Да, кажется все нормально, спасибо большое!
  21. На CPP это cv::resize , на шарпе не знаю. Ну если все получилось, поздравляю! ))
  22. Выставил в SingleBlock и все корректно распозналось
  23. Я использую вот такой код: 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, теперь распознает, но не корректно распознает строки
  24. Может там фильтр по минимальной площади текста стоит, попробуйте увеличить размер изображения, или посмотрите параметры тессеракта, помнится таи их огромная куча была. Вот, кстати: https://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version
  25. И вот столкнулся с проблемой. Не хочет распознавать одиночные символы. Например, вот как на скрине. Что можно попытаться предпринять ? Увеличить изображение ? Причем, если "дописать" цифру слева или справа, то распознает корректно.
  26. Огромное спасибо! Похоже, это именно то, что я искал! Попробую сегодня.
  1. Load more activity
×