dtritus 0 Жалоба Опубликовано November 2, 2015 Есть картинка, на которой изображены прямоугольники(фото 1) в которые выводят численные значения. На этой картинке множество таких прямоугольников, их координаты известны. Задача получить все численные значения с картинки из прямоугольников. Я получаю все прямоугольники по очереди, привожу картинку в ч/б вид(фото 2), выделяю контуры(фото 3) и отделяю все цифры (фото 4). Далее по теории я должен сравнить с образцом но как - затуп у меня возник.1. подскажите плиз куда копать - как сравнить с образцом, какие функции использовать и тд? 2.я выделяю контуры, а они идут в свободном порядке, т.е. мне нужно слева - направо (чтобы на каком месте идёт точка), а она обычно в самом начале лежит. (точка кстати просто черным квадратом маленьким получается)3. любые мысли по поводу правильности моих действий Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано November 2, 2015 В дополнительном репозитории opencv_contrib уже есть алгоритмы поиска и распознавания текста с картинки. Делается это как с помощью установленного заранее в системе tesseract, так и внутренними алгоритмами. Я бы начал с проверки работоспособности этого модуля для твоих данных (примеры уже есть, надо просто скомпилировать и запустить на своей картинке). Думаю, что он прекрасно справится. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 2, 2015 В дополнительном репозитории opencv_contrib уже есть алгоритмы поиска и распознавания текста с картинки. Делается это как с помощью установленного заранее в системе tesseract, так и внутренними алгоритмами. Я бы начал с проверки работоспособности этого модуля для твоих данных (примеры уже есть, надо просто скомпилировать и запустить на своей картинке). Думаю, что он прекрасно справится.А необходимо пересобирать библиотеку opencv с добавлением этого модуля или можно просто запустить и скомпилить модуль? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано November 2, 2015 А необходимо пересобирать библиотеку opencv с добавлением этого модуля или можно просто запустить и скомпилить модуль?в билдовой папке в строку cmake'у добавляешь -DOPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib> и пересобираешь. Ребилд будет инкрементальный без пересборки самой библиотеки. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 2, 2015 в билдовой папке в строку cmake'у добавляешь -DOPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib> и пересобираешь. Ребилд будет инкрементальный без пересборки самой библиотеки.Пардон, но толком не понял куда добавлять, опишите подробней для новичка, пожалуйста. Есть папка с которой я работал в CMake, после обработки запуска билд в ms visual получилась папка install - её и использовал как библиотеку. Куда конкретно добавить строку? и что после этого сделать? Собрать ещё раз в CMake или только в vs? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано November 2, 2015 Пардон, но толком не понял куда добавлять, опишите подробней для новичка, пожалуйста. Есть папка с которой я работал в CMake, после обработки запуска билд в ms visual получилась папка install - её и использовал как библиотеку. Куда конкретно добавить строку? и что после этого сделать? Собрать ещё раз в CMake или только в vs?Оу, как в ms vs собирать его я не в курсе.Я это делаюи примерно так (в консоли):mkdir opencv_work_dircd opencv_work_dirgit clone https://github.com/Itseez/opencv.gitgit clone https://github.com/Itseez/opencv_contrib.gitmkdir buildcd buildcmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ../opencvmake -j8 (в Windows наверно nmake можно сделать)Как-то так. В GUI у CMake скорей всего есть отдельный propertiy, который называется OPENCV_EXTRA_MODULES_PATH, куда надо вписать путь до контрибных модулей. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 2, 2015 Оу, как в ms vs собирать его я не в курсе.Я это делаюи примерно так (в консоли):mkdir opencv_work_dircd opencv_work_dirgit clone https://github.com/Itseez/opencv.gitgit clone https://github.com/Itseez/opencv_contrib.gitmkdir buildcd buildcmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ../opencvmake -j8 (в Windows наверно nmake можно сделать)Как-то так. В GUI у CMake скорей всего есть отдельный propertiy, который называется OPENCV_EXTRA_MODULES_PATH, куда надо вписать путь до контрибных модулей.а что у тебя после этого получается ? Полноценная библиотека? Просто я ещё потом открываю полученный проект после смейка в студии и делаю билд. А уже потом получаю библиотеку и её цепляю к своему проекту. я пробовал через gui ставил там этот параметр но после отработки в cmake в студии opencv не сбилдилась Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано November 2, 2015 а что у тебя после этого получается ? Полноценная библиотека? Просто я ещё потом открываю полученный проект после смейка в студии и делаю билд. А уже потом получаю библиотеку и её цепляю к своему проекту. я пробовал через gui ставил там этот параметр но после отработки в cmake в студии opencv не сбилдиласьНуу....make (nmake в Windows) на выходе должен выплевывать готовые бинарники. в MSVS вроде бы нужно будет только пути до них и до инклюдов прописать, чтобы подключить к проекту. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 3, 2015 (изменено) Нуу....make (nmake в Windows) на выходе должен выплевывать готовые бинарники. в MSVS вроде бы нужно будет только пути до них и до инклюдов прописать, чтобы подключить к проекту.А модули они к любой версии библиотеки подходят или только к 3? И к примеру мне нужен модуль text: EXTRA_MODULES_PATH=...\opencv_contrib-master\modules\text\include\opencv2 ? Изменено November 3, 2015 пользователем dtritus Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано November 3, 2015 А модули они к любой версии библиотеки подходят или только к 3? И к примеру мне нужен модуль text: EXTRA_MODULES_PATH=...\opencv_contrib-master\modules\text\include\opencv2 ?экстра модули из opencv_contrib пишутся для opencv3, на 2.4 теоретически можно портировать, но иногда проще с нуля написать модуль, чем переносить между этими версиями.нет, в OPENCV_EXTRA_MODULES_PATH прописывается путь до папки modules: <path_to_opencv_contrib>/modulesА потом нужные модули включаются/выключаются cmake-командами -DBUILD_<module_name>=ON/OFF или -DWITH_<module_name>=ON/OFF Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 3, 2015 экстра модули из opencv_contrib пишутся для opencv3, на 2.4 теоретически можно портировать, но иногда проще с нуля написать модуль, чем переносить между этими версиями.нет, в OPENCV_EXTRA_MODULES_PATH прописывается путь до папки modules: <path_to_opencv_contrib>/modulesА потом нужные модули включаются/выключаются cmake-командами -DBUILD_<module_name>=ON/OFF или -DWITH_<module_name>=ON/OFFСпасибо, вроде подсоединил. Собрал под v3. Понял что надо все модули сначала указывать, а то до этого думал только необходимый в CMake подставлять. Сейчас смотрю что в них. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 3, 2015 (изменено) Ещё вопрос а чем отличаются файлы которые мы includ'им в папках opencv и opencv2 #include "opencv/highgui.h" /*or*/ #include "opencv2/highgui/highgui.hpp"И какие предпочтительней использовать? У меня просто возникает ошибка линковки (См. рисунок). Ругается на imread:Mat src = imread("1.bmp", CV_LOAD_IMAGE_COLOR);Вроде либы добавил в проект, инклуды прописал.На всякий случай вот эти либы добавил (opencv_calib3d300d.libopencv_core300d.libopencv_features2d300d.libopencv_flann300d.libopencv_highgui300d.libopencv_imgproc300d.libopencv_ml300d.libopencv_objdetect300d.libopencv_photo300d.libopencv_ts300d.libopencv_stitching300d.libopencv_superres300d.libopencv_video300d.libopencv_videostab300d.libopencv_text300d.libopencv_ccalib300d.lib)И эти инклуды прописал:#include <opencv2/opencv.hpp> #include "opencv2/text.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <vector> #include <iostream> #include <iomanip> Изменено November 3, 2015 пользователем dtritus Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 3, 2015 (изменено) opencv2 обычно хранит C++ версию, ее и предпочтительно использовать, а в opencv лежат версии с C интерфейсом.Ошибка линковки может быть связана с использованием отладочной версии библиотек в релизной конфигурации проекта.И еще, если исходники Opencv лежат в папке с названием содержащим пробелы, и проект генерируется CMAKE ом, то в путях к библиотекам полный бардак.Можно поправить вручную файл OpenCVConfig.cmake в директории проекта OpenCV сгенерированного CMAKE-ом.# ==============================================================# Extra include directories, needed by OpenCV 2 new structure# ==============================================================SET(OpenCV2_INCLUDE_DIRS "E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudev/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/hal/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/core/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudaarithm/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/flann/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/imgproc/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/ml/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/video/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/viz/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudabgsegm/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudafilters/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudaimgproc/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudawarping/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/imgcodecs/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/photo/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/shape/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/videoio/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudacodec/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/highgui/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/objdetect/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/ts/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/features2d/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/calib3d/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudafeatures2d/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudalegacy/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudaobjdetect/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudaoptflow/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/cudastereo/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/stitching/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/superres/include";"E:/Documents/Visual Studio 2013/Projects/opencv-master/modules/videostab/include") Изменено November 3, 2015 пользователем Smorodov Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 3, 2015 На счёт opencv и opencv2 понял. Версии библиотек для каждой конфигурации проекта указаны свои. Пробелов в пути нету.В чём проблема пока что не пойму. Вот код который пытаюсь скомпилить. Это пример из opencv доп. модуля text. Какие нибудь ещё мысли есть?/* * cropped_word_recognition.cpp * * A demo program of text recognition in a given cropped word. * Shows the use of the OCRBeamSearchDecoder class API using the provided default classifier. * * Created on: Jul 9, 2015 * Author: Lluis Gomez i Bigorda <lgomez AT cvc.uab.es> */ #include "opencv2/text.hpp" #include "opencv2/core/utility.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include <iostream> using namespace std; using namespace cv; using namespace cv::text; int main(int argc, char* argv[]) { cout << endl << argv[0] << endl << endl; cout << "A demo program of Scene Text Character Recognition: " << endl; cout << "Shows the use of the OCRBeamSearchDecoder::ClassifierCallback class using the Single Layer CNN character classifier described in:" << endl; cout << "Coates, Adam, et al. \"Text detection and character recognition in scene images with unsupervised feature learning.\" ICDAR 2011." << endl << endl; Mat image; if (argc>1) image = imread(argv[1]); else { cout << " Usage: " << argv[0] << " <input_image>" << endl; cout << " the input image must contain a single character (e.g. scenetext_char01.jpg)." << endl << endl; return(0); } string vocabulary = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; // must have the same order as the clasifier output classes Ptr<OCRHMMDecoder::ClassifierCallback> ocr = loadOCRHMMClassifierCNN("OCRBeamSearch_CNN_model_data.xml.gz"); double t_r = (double)getTickCount(); vector<int> out_classes; vector<double> out_confidences; ocr->eval(image, out_classes, out_confidences); cout << "OCR output = \"" << vocabulary[out_classes[0]] << "\" with confidence " << out_confidences[0] << ". Evaluated in " << ((double)getTickCount() - t_r) * 1000 / getTickFrequency() << " ms." << endl << endl; return 0; } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 3, 2015 Есть Еще с тем же результатом можно пытаться подключить x32 либы к x64 проекту и наоборот. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 3, 2015 (изменено) Есть Еще с тем же результатом можно пытаться подключить x32 либы к x64 проекту и наоборот.А как Вы узнали что либы х64? Я собирал opencv под х32. Изменено November 3, 2015 пользователем dtritus Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 3, 2015 А проект ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 3, 2015 (изменено) А проект ? Проект тоже под х32. Собрал opencv 3 + modules в CMake под vs 2015. потом билд в vs 2015. получил библиотеки и их подключаю к проекту на x32 Изменено November 3, 2015 пользователем dtritus Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 3, 2015 Обычно когда архитектура не соответствует, линкер "не видит" библиотек, даже если они подключены, хотя и ошибок что "не найдено" не выдает. Но у Вас должно быть все нормально, если и то и другое x32. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
dtritus 0 Жалоба Опубликовано November 3, 2015 (изменено) Обычно когда архитектура не соответствует, линкер "не видит" библиотек, даже если они подключены, хотя и ошибок что "не найдено" не выдает. Но у Вас должно быть все нормально, если и то и другое x32.Попробовать пересобрать библиотеку ещё раз? Я делал по такому алгоритму :Get Cmake. In in C:\OpenCV-3.0.0, make a folder called “mybuild”.Start Cmake-gui. For “where is the source code”, put C:/OpenCV-3.0.0/sources. For where to build binaries, put C:/OpenCV-3.0.0/mybuild.Click “configure”. For what “generator” to use, you can use “Visual Studio 14 2015” (this is for 32 bit) or “Visual Studio 14 2015 Win64” (this is for 64 bit). I’m guessing the latter is better/faster? I had to uncheck “With VTK”; I don’t know why this was checked in the first place. Click “configure” again until all entries are white, not red.Click “generate”. This will create a Visual Studio “sln” file in C:/OpenCV-3.0.0/mybuild. Close cmake.In C:/OpenCV-3.0.0/mybuild, double click on “OpenCV.sln”. Now, if you have chosen the generator“Visual Studio 14 2015 Win64” in cmake, your visual studio project should be set to “x64” as the configuration at the top. It is probably set to “Debug” as well; that’s ok.After it is done “parsing”, go to “ALL_BUILD” in the “Solutions Explorer” window. Right click on that and choose “Build”. This will create all the “lib” and “dll” files for debugging. On my Surface (Windows 8.1) I get a popup message saying “Microsoft ® C/C++ Optimizing Compiler has stopped working”. I close that window and it still seems to compile ok. There are two “failures” but it seems to be a problem with building some test program.Change “Debug” to “Release”, and recompile (by right clicking on “ALL_BUILD”. This will create all the “lib” and “dll” files for the release versions.I then right clicked on “INSTALL” under “CMakeTargets” for both Debug and Release. This combines all the lib and dll files into a single “lib” and a single “bin” folder. Mine went into: C:\OpenCV-3.0.0\mybuild\install\x64\vc14\lib and C:\OpenCV-3.0.0\mybuild\install\x64\vc14\bin.I then moved C:\OpenCV-3.0.0\mybuild\install to C:\OpenCV-3.0.0\install.I then added C:\OpenCV-3.0.0\install\x64\vc14\bin to the system PATH.Делал всё под х32. Правильный алгоритм? Может ошибка при сборкеПроблема решена с помощью подключения в линкер opencv_imgcodecs300d.lib и opencv_imgcodecs300.lib, соответственно. Буду теперь разбираться по теме сабжа, собственно))) Спасибо. Изменено November 3, 2015 пользователем dtritus Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 3, 2015 (изменено) А, точно, забыл про них (imgcodecs, video и videoio) и , в последнее время на 2.4. сижу. Изменено November 3, 2015 пользователем Smorodov Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
APXANGEL 0 Жалоба Опубликовано November 26, 2015 Если ещё актуально и шрифт известен, то можно сделать следующим образом:1. Создаёшь базу бинаризованных шаблонов цифр стандартного размера, например 20х30 пикселей.2. После вырезания очередного символа из изображения (тут он уже в бинаризованном виде как я понял) делаешь его ресайз к стандартному размеру. Здесь изображение символа станет в оттенках серого, повторяешь бинаризацию.3. Проводишь XOR (в opencv bitwise_xor) между изображением символа и всеми изображениями шаблонов и каждый раз считаешь количество различающихся пикселей. Где оно будет наименьшим, с тем символом больше всего похоже. Тут ещё стоит сравнивать с некоторым порогом, т.е. всего у нас получается 600 пикселей (20 на 30), если наименьшее количество различающихся пикселей больше, к примеру, 150, то считаем символ не распознанным. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано March 20, 2016 В 26.11.2015 at 15:30, APXANGEL said: 3. Проводишь XOR (в opencv bitwise_xor) между изображением символа и всеми изображениями шаблонов и каждый раз считаешь количество различающихся пикселей. Где оно будет наименьшим, с тем символом больше всего похоже. Вопрос: количество различающихся пикселей, это и есть результат работы функции bitwise_xor? Т.е. нужно просуммировать все белые пиксели? Как я понял если два изображение идентичны, то на результирующем изображении белых пикселей не будет. Если же есть отличая, то появляются белые пиксели. Я прав? В 26.11.2015 at 15:30, APXANGEL said: 2. После вырезания очередного символа из изображения (тут он уже в бинаризованном виде как я понял) делаешь его ресайз к стандартному размеру. Здесь изображение символа станет в оттенках серого, повторяешь бинаризацию. Стандартный размер символа - это, как я понял, размер символа из базы шаблонов? Все к этому размеру приводить? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iskees 32 Жалоба Опубликовано March 20, 2016 1 просто все суммируете, у черных знание и так будет 0 2 Тут уж на вше усмотрение, главное или все приводить к размеру в базе или все к размеру распознаваемого символа, но удобнее будет к размеру базы. Ну, а вообще не факт что с бинаризвацией результат будет лучше чем без нее, стоит попробовать и так и так и выбрать. Или вообще сделать две базы, два сравнение и вбирать каждый раз с лучшим результатом (или суммировать как то) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dvoetut 2 Жалоба Опубликовано March 20, 2016 Спасибо за ответ! А есть функция opencv для подсчета суммы пикселей? У меня получается изображение со значениями пикселей 0 или 255 (после бинаризации). Я так понимаю это значит, что изображение у меня в градациях серого. Есть ли возможность перевести его в формат черно-белого, что бы пиксели принимали значение 1 или 0? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах