OMarks и OpenCV / Дополненная реальность / Recog.ru - Распознавание образов для программистов


OMarks и OpenCV

Библиотека OMarks предназначена для распознавания оптических маркеров. В версии 1.0 поддерживаются маркеры на основе баркодов Small Aztec. Вместе с библиотекой идет пример на OpenCV, с помощью которого было сделано следующее видео:

Код приведен ниже:

#include "..\\..\\SRC\\OMarksOpenCV.h"
#include "opencv2/highgui/highgui_c.h"
#include <stdio.h>

int main()
{
	

	MARKER *Markers = new MARKER[100];
	int all_markers = 100;
	CvFont font;		

	CvCapture* capture = cvCaptureFromCAM(0);
	cvNamedWindow("CameraOpenCV",CV_WINDOW_AUTOSIZE);
	bool start = false;
	int r;
	void* DMarkes = DMarksInit();
	IplImage* Gray = 0;	
	for(;;)
    {
		IplImage* frame = 0;    		

        frame = cvQueryFrame(capture );
		if( !frame )
            break;
		if ( !start )
		{
			float aa=0.001f*frame->width;
			cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX, aa,
				aa,0,2, 8 ); 
			start = true;
			Gray = cvCreateImage( cvGetSize( frame), 8, 1 );
		}
		all_markers = 100;
		cvCvtColor( frame, Gray, CV_BGR2GRAY );		
		
		r = FindMarkersOpenCV( Gray, &all_markers, Markers, OMARKS_TYPE_SMALL_AZTEC, OMARKS_QUALITY_3 );			
		
		DMarksProcessedOpenCV( Gray, &DMarkes, &all_markers, Markers, DMARK_TREMBLE | DMARK_MOTION );	

		if ( all_markers > 0 )
		{		
			for( int i = 0; i < all_markers; i++ )
			{
				 cvLine(frame, Markers[i].Points[0], Markers[i].Points[1], CV_RGB(255,0,0));
				 cvLine(frame, Markers[i].Points[1], Markers[i].Points[2], CV_RGB(255,0,0));
				 cvLine(frame, Markers[i].Points[2], Markers[i].Points[3], CV_RGB(255,0,0));
				 cvLine(frame, Markers[i].Points[3], Markers[i].Points[0], CV_RGB(255,0,0));
				 CvPoint pp;
				 pp.x=Markers[i].Points[0].x;
				 pp.y=Markers[i].Points[0].y;						 
				 cvPutText( frame, Markers[i].result, pp, &font, CV_RGB(255,0,0) );				 
			}
		}

		cvShowImage( "CameraOpenCV", frame );		
		if (cvWaitKey(30)==27) break;
	}
	cvReleaseImage( &Gray );
	cvReleaseCapture( &capture );
	delete [] Markers;
	DMarksRelease( &DMarkes );
	return 0;
}

Программа в цикле опрашивает кадры с камеры. Для каждого кадра вызывается функция FindMarkersOpenCV, которой передается изображение в градациях серого, указатель на массив, в который будут выводиться маркеры. Для исключения дрожания и пропадания маркеров вызывается функция DMarksProcessedOpenCV.

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.