ARToolKit | Mailing List Archive |
![]() |
From: | "Yuan Miaolong" <smayml@n .........> | Received: | May 13, 2003 |
To | artoolkit@h .................. | ||
Subject: | Intel OpenCV for ARToolKit | ||
Dear All, Has anyone used Intel Open CV library for ARToolkit? I would like to use some functions of Open CV library into ARToolkit, anyone has such experience and can give me some advice? Best Regards Yuan Miaolong |
From: | Hendrik Wendler <wendler@s ...................> | Received: | May 14, 2003 |
To | ART liste <artoolkit@h ..................> | ||
Subject: | Re: Intel OpenCV for ARToolKit | ||
This is a multi-part message in MIME format. --------------040008030009010909080005 Content-Type: Content-Transfer-Encoding: 8bit if was completely easy as you would exspect. look at this codesnippet: (modifies simple example (for linux (for YUV420 cams like phillips webcams)) ) the sampel makes no sense right now, but you could put any functionality in balldetect() regards, hendrik Am Die, 2003-05-13 um 06.48 schrieb Yuan Miaolong: > Dear All, > > Has anyone used Intel Open CV library for ARToolkit? I would like to use some functions of Open CV library into ARToolkit, anyone has such experience and can give me some advice? > > Best Regards > Yuan Miaolong --------------040008030009010909080005 Content-Type: text/x-csrc; charset=windows-1252; name="simpleTe.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="simpleTe.c" #ifdef _WIN32 #include <windows.h> #endif #include <stdio.h> #include <stdlib.h> #ifndef __APPLE__ #include <GL/gl.h> #include <GL/glut.h> #else #include <OpenGL/gl.h> #include <GLUT/glut.h> #endif #include <AR/gsub.h> #include <AR/video.h> #include <AR/param.h> #include <AR/ar.h> /*todo hw ----------------------------------------------------- - get channel number 3/4 -------------------------------------------------------------*/ //opencv stuff #include <cv.hpp> #include <math.h> void ballDetect(); CvImage *image; CvSize *size; int channels, maxlength; IplImage *m_pEdge; // result of canny edge detection IplImage *m_pGray; // result of conversion to grayscale IplImage *img; // tmp prescale gray IplImage *pyr; // tmp afterscale gray int canny_thres; CvPoint myCenter; ARUint8 *dataPtr; char *vconf = "-dev=/dev/video0 -channel=0"; int xsize, ysize; int thresh = 100; int count = 0; char *cparam_name = "Data/camera_para.dat"; ARParam cparam; char *patt_name = "Data/patt.hiro"; int patt_id; double patt_width = 80.0; double patt_center[2] = {0.0, 0.0}; double patt_trans[3][4]; static void init(void); static void cleanup(void); static void keyEvent( unsigned char key, int x, int y); static void mainLoop(void); static void draw( void ); main(int argc, char *argv[]) { init(); arVideoCapStart(); argMainLoop( NULL, keyEvent, mainLoop ); } static void keyEvent( unsigned char key, int x, int y) { /* quit if the ESC key is pressed */ if( key == 0x1b ) { printf("*** %f (frame/sec)\n", (double)count/arUtilTimer()); cleanup(); exit(0); } } /* main loop */ static void mainLoop(void) { //ARUint8 *dataPtr; ARMarkerInfo *marker_info; int marker_num; int j, k; /* grab a vide frame */ if( (dataPtr = (ARUint8 *)arVideoGetImage()) == NULL ) { arUtilSleep(2); return; } if( count == 0 ) arUtilTimerReset(); count++; /* detect the markers in the video frame */ if( arDetectMarker(dataPtr, thresh, &marker_info, &marker_num) < 0 ) { cleanup(); exit(0); } //ballDetect(); //argDrawMode2D(); argDispImage( dataPtr, 0,0 ); arVideoCapNext(); /* check for object visibility */ k = -1; for( j = 0; j < marker_num; j++ ) { if( patt_id == marker_info[j].id ) { if( k == -1 ) k = j; else if( marker_info[k].cf < marker_info[j].cf ) k = j; } } if( k == -1 ) { argSwapBuffers(); return; } /* get the transformation between the marker and the real camera */ arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans); draw(); argSwapBuffers(); } static void init( void ) { ARParam wparam; /* open the video path */ if( arVideoOpen( vconf ) < 0 ) exit(0); /* find the size of the window */ if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0); printf("Image size (x,y) = (%d,%d)\n", xsize, ysize); /* set the initial camera parameters */ if( arParamLoad(cparam_name, 1, &wparam) < 0 ) { printf("Camera parameter load error !!\n"); exit(0); } arParamChangeSize( &wparam, xsize, ysize, &cparam ); arInitCparam( &cparam ); printf("*** Camera Parameter ***\n"); arParamDisp( &cparam ); if( (patt_id=arLoadPatt(patt_name)) < 0 ) { printf("pattern load error !!\n"); exit(0); } /* open the graphics window */ #ifndef __APPLE__ argInit( &cparam, 1.0, 0, 0, 0, 0 ); #else argInit( &cparam, 2.0, 0, 0, 0, 0 ); #endif //-------------------------------------------------------------------------- //hwcode: OpenCV init m_pGray = m_pEdge = NULL; image = new CvImage(); size = new CvSize(); size->width = xsize; size->height = ysize; channels = 3; canny_thres = 50; cvInitImageHeader( image, *size, IPL_DEPTH_8U, channels ); m_pGray = cvCreateImage( *size, IPL_DEPTH_8U , 1); img = cvCreateImage( *size, image->byte_per_pixel()*8/image->nChannels, 1 ); pyr = cvCreateImage( cvSize(size->width/2, size->height/2), image->byte_per_pixel()*8/image->nChannels, 1 ); printf("CvImage created (x,y) = (%d,%d)\n", size->width, size->height); //-------------------------------------------------------------------------- } /* cleanup function called when program exits */ static void cleanup(void) { arVideoCapStop(); arVideoClose(); argCleanup(); cvReleaseImage(&m_pGray); cvReleaseImage(&m_pEdge); cvReleaseImage(&img); cvReleaseImage(&pyr); } static void draw( void ) { double gl_para[16]; GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0}; GLfloat mat_flash[] = {0.0, 0.0, 1.0, 1.0}; GLfloat mat_flash_shiny[] = {50.0}; GLfloat light_position[] = {100.0,-200.0,200.0,0.0}; GLfloat ambi[] = {0.1, 0.1, 0.1, 0.1}; GLfloat lightZeroColor[] = {0.9, 0.9, 0.9, 0.1}; argDrawMode3D(); argDraw3dCamera( 0, 0 ); glClearDepth( 1.0 ); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); /* load the camera transformation matrix */ argConvGlpara(patt_trans, gl_para); glMatrixMode(GL_MODELVIEW); glLoadMatrixd( gl_para ); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT, ambi); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash); glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMatrixMode(GL_MODELVIEW); glTranslatef( 0.0, 0.0, 25.0 ); glutSolidCube(50.0); glDisable( GL_LIGHTING ); glDisable( GL_DEPTH_TEST ); } void ballDetect() { cvSetImageData( image, dataPtr, size->width * channels ); //printf("channels %d\n", channels); canny_thres = 100; //cvCvtColor( image ,m_pGray, CV_RGB2GRAY); //cvCanny( m_pGray,m_pGray, canny_thres, canny_thres, 3 ); //cvCvtColor( m_pGray ,image, CV_GRAY2RGB); } --------------040008030009010909080005 Content-Type: text/x-makefile; charset=windows-1252; name="Makefile.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="Makefile.txt" INC_DIR= ../../include LIB_DIR= ../../lib BIN_DIR= ../../bin LDFLAG=-L/usr/X11R6/lib -L$(LIB_DIR) LIBS= -lARgsub -lARvideo -lAR -lglut -lGLU -lGL -lXi -lXmu -lX11 -lm -lopencv -lcvaux CFLAG= -O -I/usr/X11R6/include -I$(INC_DIR) -I/usr/local/include/opencv OBJS = HEADDERS = all: $(BIN_DIR)/simpleTest $(BIN_DIR)/simpleTest: simpleTest.o $(OBJS) g++ -o $(BIN_DIR)/simpleTest simpleTest.o $(OBJS) $(LDFLAG) $(LIBS) simpleTest.o: simpleTest.c $(HEADDERS) g++ -c $(CFLAG) simpleTest.c clean: rm -f *.o rm -f $(BIN_DIR)/simpleTest allclean: rm -f *.o rm -f $(BIN_DIR)/simpleTest rm -f Makefile --------------040008030009010909080005-- |
From: | Hendrik Wendler <wendler@s ...................> | Received: | May 14, 2003 |
To | ART liste <artoolkit@h ..................> | ||
Subject: | Re: Intel OpenCV for ARToolKit | ||
This is a multi-part message in MIME format. --------------040602030709070402070503 Content-Type: Content-Transfer-Encoding: 8bit if was completely easy as you would exspect. look at this codesnippet: (modifies simple example (for linux (for YUV420 cams like phillips webcams)) ) the sampel makes no sense right now, but you could put any functionality in balldetect() regards, hendrik Am Die, 2003-05-13 um 06.48 schrieb Yuan Miaolong: > Dear All, > > Has anyone used Intel Open CV library for ARToolkit? I would like to use some functions of Open CV library into ARToolkit, anyone has such experience and can give me some advice? > > Best Regards > Yuan Miaolong --------------040602030709070402070503 Content-Type: text/x-csrc; charset=windows-1252; name="simpleTe.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="simpleTe.c" #ifdef _WIN32 #include <windows.h> #endif #include <stdio.h> #include <stdlib.h> #ifndef __APPLE__ #include <GL/gl.h> #include <GL/glut.h> #else #include <OpenGL/gl.h> #include <GLUT/glut.h> #endif #include <AR/gsub.h> #include <AR/video.h> #include <AR/param.h> #include <AR/ar.h> /*todo hw ----------------------------------------------------- - get channel number 3/4 -------------------------------------------------------------*/ //opencv stuff #include <cv.hpp> #include <math.h> void ballDetect(); CvImage *image; CvSize *size; int channels, maxlength; IplImage *m_pEdge; // result of canny edge detection IplImage *m_pGray; // result of conversion to grayscale IplImage *img; // tmp prescale gray IplImage *pyr; // tmp afterscale gray int canny_thres; CvPoint myCenter; ARUint8 *dataPtr; char *vconf = "-dev=/dev/video0 -channel=0"; int xsize, ysize; int thresh = 100; int count = 0; char *cparam_name = "Data/camera_para.dat"; ARParam cparam; char *patt_name = "Data/patt.hiro"; int patt_id; double patt_width = 80.0; double patt_center[2] = {0.0, 0.0}; double patt_trans[3][4]; static void init(void); static void cleanup(void); static void keyEvent( unsigned char key, int x, int y); static void mainLoop(void); static void draw( void ); main(int argc, char *argv[]) { init(); arVideoCapStart(); argMainLoop( NULL, keyEvent, mainLoop ); } static void keyEvent( unsigned char key, int x, int y) { /* quit if the ESC key is pressed */ if( key == 0x1b ) { printf("*** %f (frame/sec)\n", (double)count/arUtilTimer()); cleanup(); exit(0); } } /* main loop */ static void mainLoop(void) { //ARUint8 *dataPtr; ARMarkerInfo *marker_info; int marker_num; int j, k; /* grab a vide frame */ if( (dataPtr = (ARUint8 *)arVideoGetImage()) == NULL ) { arUtilSleep(2); return; } if( count == 0 ) arUtilTimerReset(); count++; /* detect the markers in the video frame */ if( arDetectMarker(dataPtr, thresh, &marker_info, &marker_num) < 0 ) { cleanup(); exit(0); } //ballDetect(); //argDrawMode2D(); argDispImage( dataPtr, 0,0 ); arVideoCapNext(); /* check for object visibility */ k = -1; for( j = 0; j < marker_num; j++ ) { if( patt_id == marker_info[j].id ) { if( k == -1 ) k = j; else if( marker_info[k].cf < marker_info[j].cf ) k = j; } } if( k == -1 ) { argSwapBuffers(); return; } /* get the transformation between the marker and the real camera */ arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans); draw(); argSwapBuffers(); } static void init( void ) { ARParam wparam; /* open the video path */ if( arVideoOpen( vconf ) < 0 ) exit(0); /* find the size of the window */ if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0); printf("Image size (x,y) = (%d,%d)\n", xsize, ysize); /* set the initial camera parameters */ if( arParamLoad(cparam_name, 1, &wparam) < 0 ) { printf("Camera parameter load error !!\n"); exit(0); } arParamChangeSize( &wparam, xsize, ysize, &cparam ); arInitCparam( &cparam ); printf("*** Camera Parameter ***\n"); arParamDisp( &cparam ); if( (patt_id=arLoadPatt(patt_name)) < 0 ) { printf("pattern load error !!\n"); exit(0); } /* open the graphics window */ #ifndef __APPLE__ argInit( &cparam, 1.0, 0, 0, 0, 0 ); #else argInit( &cparam, 2.0, 0, 0, 0, 0 ); #endif //-------------------------------------------------------------------------- //hwcode: OpenCV init m_pGray = m_pEdge = NULL; image = new CvImage(); size = new CvSize(); size->width = xsize; size->height = ysize; channels = 3; canny_thres = 50; cvInitImageHeader( image, *size, IPL_DEPTH_8U, channels ); m_pGray = cvCreateImage( *size, IPL_DEPTH_8U , 1); img = cvCreateImage( *size, image->byte_per_pixel()*8/image->nChannels, 1 ); pyr = cvCreateImage( cvSize(size->width/2, size->height/2), image->byte_per_pixel()*8/image->nChannels, 1 ); printf("CvImage created (x,y) = (%d,%d)\n", size->width, size->height); //-------------------------------------------------------------------------- } /* cleanup function called when program exits */ static void cleanup(void) { arVideoCapStop(); arVideoClose(); argCleanup(); cvReleaseImage(&m_pGray); cvReleaseImage(&m_pEdge); cvReleaseImage(&img); cvReleaseImage(&pyr); } static void draw( void ) { double gl_para[16]; GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0}; GLfloat mat_flash[] = {0.0, 0.0, 1.0, 1.0}; GLfloat mat_flash_shiny[] = {50.0}; GLfloat light_position[] = {100.0,-200.0,200.0,0.0}; GLfloat ambi[] = {0.1, 0.1, 0.1, 0.1}; GLfloat lightZeroColor[] = {0.9, 0.9, 0.9, 0.1}; argDrawMode3D(); argDraw3dCamera( 0, 0 ); glClearDepth( 1.0 ); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); /* load the camera transformation matrix */ argConvGlpara(patt_trans, gl_para); glMatrixMode(GL_MODELVIEW); glLoadMatrixd( gl_para ); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT, ambi); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash); glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMatrixMode(GL_MODELVIEW); glTranslatef( 0.0, 0.0, 25.0 ); glutSolidCube(50.0); glDisable( GL_LIGHTING ); glDisable( GL_DEPTH_TEST ); } void ballDetect() { cvSetImageData( image, dataPtr, size->width * channels ); //printf("channels %d\n", channels); canny_thres = 100; //cvCvtColor( image ,m_pGray, CV_RGB2GRAY); //cvCanny( m_pGray,m_pGray, canny_thres, canny_thres, 3 ); //cvCvtColor( m_pGray ,image, CV_GRAY2RGB); } --------------040602030709070402070503 Content-Type: text/x-makefile; charset=windows-1252; name="Makefile.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="Makefile.txt" INC_DIR= ../../include LIB_DIR= ../../lib BIN_DIR= ../../bin LDFLAG=-L/usr/X11R6/lib -L$(LIB_DIR) LIBS= -lARgsub -lARvideo -lAR -lglut -lGLU -lGL -lXi -lXmu -lX11 -lm -lopencv -lcvaux CFLAG= -O -I/usr/X11R6/include -I$(INC_DIR) -I/usr/local/include/opencv OBJS = HEADDERS = all: $(BIN_DIR)/simpleTest $(BIN_DIR)/simpleTest: simpleTest.o $(OBJS) g++ -o $(BIN_DIR)/simpleTest simpleTest.o $(OBJS) $(LDFLAG) $(LIBS) simpleTest.o: simpleTest.c $(HEADDERS) g++ -c $(CFLAG) simpleTest.c clean: rm -f *.o rm -f $(BIN_DIR)/simpleTest allclean: rm -f *.o rm -f $(BIN_DIR)/simpleTest rm -f Makefile --------------040602030709070402070503-- |