Archi39 0 Жалоба Опубликовано May 21, 2012 Доброй ночи люди добрые!) В общем я человек не совсем сведущий, а точнее вообще мало что понимающий в библиотеке OpenCV, но так пал жребий, что на раздаче курсовых мне досталось задание с распознаванием текста, а так как у нас преподаватель с фантазией он решил исхитриться и предложил распознать судоку и перевести его с изображения в текстовый файл. После нескольких дней мытарств, я понял что сам точно не справлюсь, вот и обращаюсь к вам за помощью... Алгоритм который возник у меня в голове особой фантазией не отличается: 1. Определение сетки судоку 2. Определение угла наклона (изображение может неровно располагаться) 3. Определение контуров клеток 4. Определение контуров чисел в них 5. Оцифровка Проблемы сразу же начались у меня на 1ом пункте, используя преобразования Хафа, я вроде бы выделил линии сетки, но никак не получается ограничить область судоку, от всего остального мусора на картинке, подскажите как это можно сделать Ну внизу мой код int main(int argc, char* argv[]) { IplImage* src = 0; IplImage* dst=0; IplImage* color_dst=0; char* filename = argc >= 2 ? argv[1] : "c:\\Image1.jpg"; src = cvLoadImage(filename, CV_LOAD_IMAGE_GRAYSCALE); if( !src ){ printf("[!] Error: cant load image: %s \n", filename); return -1; } printf("[i] image: %s\n", filename); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* lines = 0; int i = 0; dst = cvCreateImage( cvGetSize(src), 8, 1 ); color_dst = cvCreateImage( cvGetSize(src), 8, 3 ); cvCanny( src, dst, 50, 200, 3 ); cvCvtColor( dst, color_dst, CV_GRAY2BGR ); lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/360, 50, 50, 5); double perimI = 0; int count=0; CvSeq* LineT=0; for( i = 0; i < lines->total; i++ ){ CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i); cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 ); } cvNamedWindow( "Source", 1 ); cvShowImage( "Source", src ); cvNamedWindow( "Hough", 1 ); cvShowImage( "Hough", color_dst ); cvWaitKey(0); cvReleaseMemStorage(&storage); cvReleaseImage(&src); cvReleaseImage(&dst); cvReleaseImage(&color_dst); cvDestroyAllWindows(); return 0; } Очень нужна ваша помощь Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 22, 2012 http://www.aishack.in/2010/08/sudoku-grabber-with-opencv/ http://www.codeproject.com/Articles/238114/Realtime-Webcam-Sudoku-Solver http://sudokugrab.blogspot.com/2009/07/how-does-it-all-work.html учитывая что все цифры одного масштаба и центрированы в клетках, наверно можно делать вообще попиксельное сравнение для OCR, но правда завязка на шрифт эталона будет. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Archi39 0 Жалоба Опубликовано May 22, 2012 Спасибо за помощь, будем разбираться Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Archi39 0 Жалоба Опубликовано May 26, 2012 Ребят подсобите еще немного, есть ли еще у кого нить, примеры использования для распознавания текста уже готовых OCR библиотек, таких как tesseract-ocr например? Ну или кроме tesseracta, какую еще можно попробовать? Пусть даже не особо мощную в плане поддержки шрифтов, но не такую громоздкую. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 28, 2012 если у вас одно и то же судоку= шрифты не меняются, буквы одного размера и центрированы, то самый простой способ попиксельной сравнение бинарных картинок или через Ху моменты. ну и опять же контурный анализ, тут пробегала тема на форуме и статья на хабре и была готовая программа на С#. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах