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

TotenSie

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

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

  • Посещение

Сообщения, опубликованные пользователем TotenSie


  1. Исходное изображение:

    52131858.jpg

    Результат программы:

    resultg.jpg

    Тока чёто буковку У плохо обвел, он ее зачем то разделил на 2 контура =)

    Если будут какие то замечания, то пишите.

    #include "stdafx.h"
    
    #include <stdio.h>
    
    #include "cv.h"
    
    #include "highgui.h"
    
    
    
    int main()
    
    {
    
    	CvMemStorage* image_storage = cvCreateMemStorage(0);
    
    	CvSeq* image_contours;
    
    
    	cvNamedWindow( "Window1", 1 );
    
    	IplImage *image = 0;
    
    	IplImage *clone = cvCreateImage(cvSize(227,42), IPL_DEPTH_8U, 3);
    
    	image = cvLoadImage( "ex.jpg", 1 );
    
    	IplImage *image_gray = cvCreateImage(cvSize(227,42), IPL_DEPTH_8U, 1);
    
    	cvCvtColor( image, image_gray, CV_BGR2GRAY );
    
    	IplImage *image_canny = cvCreateImage(cvSize(227,42), IPL_DEPTH_8U, 1);
    
    	cvCanny( image_gray, image_canny, 50, 255, 3 );
    
    	cvFindContours( image_canny, image_storage, &image_contours, sizeof(CvContour), 
    
    		CV_RETR_TREE);
    
    
    		while(image_contours)
    
    		{
    
    		cvZero( clone );
    
    		cvDrawContours( image, image_contours, CV_RGB(255,0,0), CV_RGB(0,255,0), 0, 0, CV_AA, cvPoint(0,0) );
    
    		CvRect rect = cvBoundingRect(image_contours);
    
    		printf("%d %d %d %d\n", rect.x, rect.y, rect.width, rect.height);
    
    		if(rect.width > 10 && rect.width < 60 && rect.height > 20 && rect.height < 60)
    
    		{
    
    		cvRectangle(image, cvPoint(rect.x, rect.y), cvPoint(rect.x+rect.width,rect.y+rect.height),
    
    			CV_RGB(0,255,0), 0);
    
    		}
    
    		image_contours = image_contours ->h_next;
    
    
    		cvShowImage( "Window1", image );
    
    		cvWaitKey(0);
    
    		}
    
    
    
    	cvDestroyWindow( "Window1" );
    
    	cvReleaseImage( &image );
    
    	cvReleaseImage( &image_gray );
    
    	cvReleaseImage( &image_canny );
    
    	cvReleaseImage( &clone );
    
    	cvClearMemStorage( image_storage );
    
    
    	return 0;
    
    }


  2. Дело в том что я хочу применить этот метод для распознавания автомобильного номерного знака. Насколько я помню в номерном знаке могут присутствовать цифры от 0 до 9 и буквы(А, В, Е, К, М, Н, О, Р, С, Т, У, Х). Проблема возникает тут тока с цифрами 6 и 9, 0 и о. Хотелось бы еще узнать, есть ли какие нить другие методы реализации данной задачи с помощью OpenCV и без использования нейронных сетей.


  3. Добрый день.

    В общем прочитал статейку одну про распознавание текста с помощью инвариантных моментов и решил попробовать сделать.

    Написал прогу, которая должна находить контуры 2 изображений и их моменты, но что то не получается при распознавании.

    Беру 2 изображения.

    e100ee22.jpg

    86219012.jpg

    #include "stdafx.h"
    
    #include <stdio.h>
    
    #include "cv.h"
    
    #include "highgui.h"
    
    
    
    int main()
    
    {
    
    CvMemStorage* image_storage = cvCreateMemStorage(0);
    
    CvMemStorage* nomer_storage = cvCreateMemStorage(0);
    
    CvSeq* nomer_contours;
    
    CvSeq* image_contours;
    
    
    IplImage *image = 0;
    
    image = cvLoadImage( "ex.jpg", 1 );
    
    IplImage *image_gray = cvCreateImage(cvSize(24,42), IPL_DEPTH_8U, 1);
    
    cvCvtColor( image, image_gray, CV_BGR2GRAY );
    
    IplImage *image_canny = cvCreateImage(cvSize(24,42), IPL_DEPTH_8U, 1);
    
    cvCanny( image_gray, image_canny, 50, 255, 3 );
    
    
    IplImage *nomer = 0;
    
    nomer = cvLoadImage( "E100EE22.jpg", 1 );
    
    IplImage *nomer_gray = cvCreateImage(cvSize(24,42), IPL_DEPTH_8U, 1);
    
    cvCvtColor( nomer, nomer_gray, CV_BGR2GRAY );
    
    IplImage *nomer_canny = cvCreateImage(cvSize(24,42), IPL_DEPTH_8U, 1);
    
    cvCanny( nomer_gray, nomer_canny, 50, 255, 3 );
    
    
    
    cvFindContours( nomer_canny, image_storage, &nomer_contours, sizeof(CvContour), CV_RETR_TREE,
    
    			   CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
    
    
    cvFindContours( image_canny, nomer_storage, &image_contours, sizeof(CvContour), CV_RETR_TREE,
    
    			   CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
    
    
    double match = cvMatchShapes( nomer_contours, image_contours, CV_CONTOURS_MATCH_I3))
    
    
    cvReleaseImage( &nomer );
    
    cvReleaseImage( &nomer_gray );
    
    cvReleaseImage( &nomer_canny );
    
    cvReleaseImage( &image );
    
    cvReleaseImage( &image_gray );
    
    cvReleaseImage( &image_canny );
    
    cvClearMemStorage( image_storage );
    
    cvClearMemStorage( nomer_storage );
    
    return 0;
    
    }

×