Доброй ночи люди добрые!)
В общем я человек не совсем сведущий, а точнее вообще мало что понимающий в библиотеке 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;
}
Очень нужна ваша помощь