Результат MediaWiki API
Это HTML-представление формата JSON. HTML хорош для отладки, но неудобен для практического применения.
Укажите параметр format для изменения формата вывода. Для отображения не-HTML-представления формата JSON, присвойте format=json.
См. полную документацию или справку API для получения дополнительной информации.
{ "batchcomplete": "", "continue": { "gapcontinue": "RoboBrainMenu", "continue": "gapcontinue||" }, "query": { "pages": { "2016": { "pageid": 2016, "ns": 0, "title": "RealRobot", "revisions": [ { "contentformat": "text/x-wiki", "contentmodel": "wikitext", "*": "[[Category:\u041f\u0440\u043e\u0435\u043a\u0442\u044b|\u041f\u0440\u043e\u0435\u043a\u0442\u044b]]\n[[\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435:RealRobot.jpg|thumb|200px|\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0440\u043e\u0431\u043e\u0442\u0430|right]]\n\n== \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 ==\n\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0440\u0430\u0434\u0438\u043e\u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043e \u041f\u041a \u0438 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u043e\u043c \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u041f\u041a, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u043e\u0431\u043e\u0442\u043e\u043c \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e\u0431\u044b \u0438\u0437 \u043d\u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 COM-\u043f\u043e\u0440\u0442\u043e\u043c).\n\n== \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 ==\n\u0413\u0430\u0431\u0430\u0440\u0438\u0442\u044b: 85\u044585\u043c\u043c (\u0434\u043b\u0438\u043d\u0430 \u0445 \u0448\u0438\u0440\u0438\u043d\u0430), \u0434\u0438\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043b\u0435\u0441 - 80\u043c\u043c\n\n\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443: ATMega128\n\n\u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438: \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 RC-Servo\n\n\u0421\u0432\u044f\u0437\u044c \u0441 \u041f\u041a: Bluetooth\n\n\u041f\u0438\u0442\u0430\u043d\u0438\u0435: 4 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \"\u0410\u0410\"\n\n\u0421\u0435\u043d\u0441\u043e\u0440\u044b:\n* \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u044b 130 \u043a\u043b\u0438\u043a\u043e\u0432 \u043d\u0430 \u043e\u0431\u043e\u0440\u043e\u0442 \u043a\u043e\u043b\u0435\u0441\u0430;\n* \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 (\u0447\u0435\u0440\u043d\u0430\u044f/\u0431\u0435\u043b\u0430\u044f - 4 \u0448\u0442\u0443\u043a\u0438, \u043f\u043e \u0443\u0433\u043b\u0430\u043c);\n* \u0434\u0430\u0442\u0447\u0438\u043a \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0418\u041a-\u0434\u0430\u043b\u044c\u043d\u043e\u043c\u0435\u0440 SHARP;\n\n== \u0421\u0441\u044b\u043b\u043a\u0438 ==\n\n\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 [http://www.realrobot.ru/ realrobot.ru]." } ] }, "3051": { "pageid": 3051, "ns": 0, "title": "Realsystem", "revisions": [ { "contentformat": "text/x-wiki", "contentmodel": "wikitext", "*": "== \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 OpenCV \u0432 \u041e\u0421 Linux ==\n\n\u042f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0432 \u041e\u0421 Alt Linux \u0441 \u044f\u0434\u0440\u043e\u043c 2.6.\n\n\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438: [http://opencv.willowgarage.com/wiki/CompileOpenCVUsingLinux]\n\n\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b Linux, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a gcc, gcc4.1-c++, automake, autoconf. \u0412 \u0410\u043b\u044c\u0442 \u041b\u0438\u043d\u0443\u043a\u0441\u0435 \u043e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e apt-get install. \u0417\u0430\u0442\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c cmake \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0441\u0431\u043e\u0440\u043a\u0435 OpenCV.\n<blockquote>\nmkdir vision;cd vision<br/>\nwget http://www.cmake.org/files/v2.8/cmake-2.8.2.tar.gz<br/>\ntar -zxf cmake-2.8.2.tar.gz;cd cmake-2.8.2<br/>\n./bootstrap; make; sudo make install<br/>\ncd ../<br/>\nwget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.1/OpenCV-2.1.0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fopencvlibrary%2Ffiles%2Fopencv-unix%2F2.1%2F&ts=1281621769&mirror=citylan<br/>\ntar -jxf OpenCV-2.1.0.tar.bz2;cd OpenCV-2.1.0<br/>\nmkdir release;cd release<br/>\ncmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..; make; sudo make install\n</blockquote>\n\u0415\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.\n<blockquote>\nsudo echo \"/usr/local/lib\" > /etc/ld.conf.d/opencv.conf<br/>\nsudo ldconfig\n</blockquote>\n\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c OpenCV. \u042f \u0432\u0437\u044f\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 [http://roboforum.ru/wiki/%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_cvQCodeBeacons] \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u044f\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442 libgtk+2-devel\n\n<source lang=\"cpp\">\n#pragma hdrstop\n#include \"CvQCodeBeacons.h\"\n#pragma package(smart_init)\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <math.h>\n\n\n \ndouble angleF(char* datas, long int steps, CvSize szSrc, int bx,int by,int dx1,int dy1,int dx2,int dy2,int l, int b){\n double inner=0, outer=0;\n double d1=sqrt(dx1*dx1+dy1*dy1);\n double d2=sqrt(dx2*dx2+dy2*dy2);\n double dx1n=dx1/d1, dy1n=dy1/d1;\n double dx2n=dx2/d2, dy2n=dy2/d2;\n for(int j=1; j<=b; j++){\n for(int i=1; i<=l; i++){\n long int adr,d_x,d_y;\n d_x=bx+j*(dx1n+dx2n)+i*dx1n;\n d_y=by+j*(dy1n+dy2n)+i*dy1n;\n if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n inner+=0;\n }else{\n adr=d_x*3+(szSrc.height-d_y)*steps+2;\n inner+=datas[adr];\n };\n d_x=bx+j*(dx1n+dx2n)+i*dx2n;\n d_y=by+j*(dy1n+dy2n)+i*dy2n;\n if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n inner+=0;\n }else{\n adr=d_x*3+(szSrc.height-d_y)*steps+2;\n inner+=datas[adr];\n };\n d_x=bx-j*(dx1n+dx2n)+i*dx1n;\n d_y=by-j*(dy1n+dy2n)+i*dy1n;\n if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n outer+=0;\n }else{\n adr=d_x*3+(szSrc.height-d_y)*steps+2;\n outer+=datas[adr];\n };\n d_x=bx-j*(dx1n+dx2n)+i*dx2n;\n d_y=by-j*(dy1n+dy2n)+i*dy2n;\n if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n outer+=0;\n }else{\n adr=d_x*3+(szSrc.height-d_y)*steps+2;\n outer+=datas[adr];\n };\n };};\n return outer-inner;\n};\n \ndouble sqr(double a){\n return a*a;\n};\n \nCvQCodeBeacon* mycvGetQCodeBeacons(IplImage *img, int ThresholdSteps, double k_front, double k_side){\n CvQCodeBeacon* fbeacon = NULL;\n \n CvSize szSrc; szSrc.width=img->width; szSrc.height=img->height;\n CvSize szDiv2; szDiv2.width=szSrc.width/2; szDiv2.height=szSrc.height/2;\n \n IplImage* pyr = cvCreateImage(szDiv2, IPL_DEPTH_8U, 3);\n IplImage* tmp = cvCreateImage(szSrc, IPL_DEPTH_8U, 3);\n\n cvPyrDown( img, pyr, 7 );\n cvPyrUp( pyr, tmp, 7 );\n \n IplImage* gray = cvCreateImage( szSrc, 8, 1 );\n IplImage* tgray = cvCreateImage( szSrc, 8, 1 );\n \n cvSetImageCOI( tmp, 2 );\n cvCopy( tmp, tgray, 0 );\n \n CvMemStorage* storage=cvCreateMemStorage(0);\n CvSeq* contours, result;\n \n for(int l=0; l<ThresholdSteps; l++){\n if(l==0){\n cvCanny( tgray, gray, 0, 100, 5 );\n cvDilate( gray, gray, 0, 1 );\n }else{\n cvThreshold( tgray, gray, (l+1)*255/ThresholdSteps, 255, CV_THRESH_BINARY );\n };\n \n cvFindContours( gray, storage, &contours, sizeof(CvContour),\n CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );\n \n while( contours )\n {\n CvSeq* result = cvApproxPoly( contours, sizeof(CvContour), storage,\n CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0 );\n \n int count = result->total;\n\n if(\n count == 4 \n && fabs(cvContourArea(result,CV_WHOLE_SEQ)) > 100 \n && cvCheckContourConvexity(result) \n ){\n int isPara=1;\n \n double x[5],y[5];\n for(int i=0; i < count; i++){\n CvPoint *pt=(CvPoint*)cvGetSeqElem( result, i );\n x[i]=pt->x;\n y[i]=szSrc.height-pt->y;\n }; x[count]=x[0]; y[count]=y[0];\n \n double l[5];\n for(int i=1; i<=4; i++){\n l[i]=sqrt(sqr(x[i-1]-x[i])+sqr(y[i-1]-y[i]));\n };\n\n if( fabs(l[1]/(l[1]+l[3])-0.5)>0.1 ){ isPara=0; };\n if( fabs(l[2]/(l[2]+l[4])-0.5)>0.1 ){ isPara=0; };\n if( fabs(l[2]/(l[2]+l[3])-0.5)>0.2 ){ isPara=0; };\n if( l[1]+l[2]>800 ){ isPara=0; };\n \n\n double s_mul=(x[1]-x[0])*(x[2]-x[1])+(y[1]-y[0])*(y[2]-y[1]);\n double cos_a=s_mul/(l[1]*l[2]);\n if( cos_a > 0.3 ){ isPara=0; };\n \n if( isPara ){\n double cx=(x[0]+x[1]+x[2]+x[3])/4;\n double cy=(y[0]+y[1]+y[2]+y[3])/4;\n CvQCodeBeacon *bc=fbeacon;\n while( bc ){\n double dist=sqrt(sqr(cx-bc->x)+sqr(cy-bc->y));\n if( dist<5 ){ isPara=0; }; \n bc=bc->next;\n };\n };\n \n if( isPara ){\n double idx1,idy1,idx2,idy2,idx3,idy3;\n \n char* datas=tmp->imageDataOrigin;\n long int steps=tmp->widthStep;\n \n double v1x=x[1]-x[2], v1y=y[1]-y[2];\n double v2x=x[3]-x[2], v2y=y[3]-y[2];\n \n int area=5;\n int L=8;\n int B=3;\n \n double wasmax=0;\n for(long int dx1=-area; dx1<=area; dx1++){\n for(long int dy1=-area; dy1<=area; dy1++){\n double a=angleF(datas,steps,szSrc,x[1]+dx1,y[1]+dy1,-v1x,-v1y,v2x,v2y,L,B);\n if(a>wasmax){\n idx1=dx1; idy1=dy1;\n wasmax=a;\n };\n };};\n \n wasmax=0;\n for(long int dx2=-area; dx2<=area; dx2++){\n for(long int dy2=-area; dy2<=area; dy2++){\n double a=angleF(datas,steps,szSrc,x[2]+dx2,y[2]+dy2,v1x,v1y,v2x,v2y,L,B);\n if(a>wasmax){\n idx2=dx2; idy2=dy2;\n wasmax=a;\n };\n };};\n \n wasmax=0;\n for(long int dx3=-area; dx3<=area; dx3++){\n for(long int dy3=-area; dy3<=area; dy3++){\n double a=angleF(datas,steps,szSrc,x[3]+dx3,y[3]+dy3,v1x,v1y,-v2x,-v2y,L,B);\n if(a>wasmax){\n idx3=dx3; idy3=dy3;\n wasmax=a;\n };\n };};\n \n double res[7][7];\n int K=7;\n \n double base_x=x[2]+idx2, base_y=y[2]+idy2;\n v1x=x[1]-x[2]+idx1-idx2, v1y=y[1]-y[2]+idy1-idy2;\n v2x=x[3]-x[2]+idx3-idx2, v2y=y[3]-y[2]+idy3-idy2;\n \n double vmax=0,vmin=255;\n \n for(long int d1=0; d1<K; d1++){\n for(long int d2=0; d2<K; d2++){\n long int d_x=base_x+(0.5+d1)*v1x/K+(0.5+d2)*v2x/K;\n long int d_y=base_y+(0.5+d1)*v1y/K+(0.5+d2)*v2y/K;\n if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n res[d1][d2]=1000;\n }else{\n long int adr=d_x*3+(szSrc.height-d_y)*steps+2;\n res[d1][d2]=datas[adr];\n };\n if( res[d1][d2]>vmax ){ vmax=res[d1][d2]; };\n if( res[d1][d2]<vmin ){ vmin=res[d1][d2]; };\n };};\n \n for(int d1=0; d1<K; d1++){\n for(int d2=0; d2<K; d2++){\n res[d1][d2]= res[d1][d2]<(vmax+vmin)/2 ? 1 : 0;\n if (res[d1][d2] == 0) res[d1][d2] = 1;\n else res[d1][d2] = 0;\n };\n };\n \n int isGood=1;\n \n for(int i=0; i<K; i++){\n if( res[0][i]==0 ){ isGood=0; i=K; };\n if( res[K-1][i]==0 ){ isGood=0; i=K; };\n if( res[i][0]==0 ){ isGood=0; i=K; };\n if( res[i][K-1]==0 ){ isGood=0; i=K; };\n };\n \n if( res[1][1]+res[5][1]+res[5][5]+res[1][5] != 1 ){ isGood=0; };\n if( isGood==1 ){\n double tmp[7][7];\n for(int d1=0; d1<K; d1++){\n for(int d2=0; d2<K; d2++){\n int dd1=res[1][1]+res[1][5]==1 ? d1 : K-1-d1;\n int dd2=res[1][1]+res[5][1]==1 ? d2 : K-1-d2;\n tmp[d1][d2]=res[dd1][dd2];\n };};\n \n for(int d1=0; d1<K; d1++){\n for(int d2=0; d2<K; d2++){\n int dd1=tmp[1][2]==1 ? d1 : d2;\n int dd2=tmp[1][2]==1 ? d2 : d1;\n res[d1][d2]=tmp[dd1][dd2];\n };};\n \n int code[20]; for(int i=0; i<20; i++){ code[i]=0; };\n \n long int beacon=0;\n if( isGood==1 ){\n int checkbits=0;\n for(int i=2; i<=4; i++){ code[i-1]=res[5][i]; };\n for(int i=1; i<=5; i++){ code[i+3]=res[4][i]; code[i+8]=res[3][i]; };\n for(int i=2; i<=5; i++){ code[i+12]=res[2][i]; };\n for(int i=3; i<=4; i++){ code[i+15]=res[1][i]; };\n for(int j=0; j<5; j++){\n int bits=0;\n for(int i=0; i<4; i++){ bits = (bits << 1) + code[j*4+i]; };\n checkbits = checkbits ^ bits;\n if( j<4 ){ beacon = (beacon << 4) + bits; };\n };\n if( checkbits != 13 ){ isGood=0; printf(\"checkbits=%d\\n\", checkbits);};\n };\n if( isGood==1 ){\n CvQCodeBeacon* cur=fbeacon;\n while( cur && cur->next && cur->id != beacon ){ cur=cur->next; };\n if( !cur ){\n cur=new CvQCodeBeacon();\n fbeacon=cur;\n cur->next=NULL;\n }else if( cur->id != beacon ){\n cur->next=new CvQCodeBeacon();\n cur=cur->next;\n cur->next=NULL;\n };\n cur->id=beacon;\n cur->x=base_x+(v1x+v2x)/2;\n cur->y=base_y+(v1y+v2y)/2;\n cur->bx=base_x;\n cur->by=base_y;\n cur->x1=v1x;\n cur->y1=v1y;\n cur->x2=v2x;\n cur->y2=v2y;\n long double size=sqrt(sqr(v1x+v2x)+sqr(v1y+v2y));\n \n cur->rx=k_front*szDiv2.width/size;\n cur->ry=((cur->x) - szDiv2.width)*(cur->rx)/(szDiv2.width*k_side);\n cur->rz=((cur->y) - szDiv2.height)*(cur->rx)/(szDiv2.width*k_side);\n \n cur->d=sqrt(sqr(cur->rx)+sqr(cur->ry)+sqr(cur->rz));\n cur->d=floor(cur->d*100)/100;\n printf(\"beacon=%d\\n\", cur->id);\n for(int d1=K-1; d1>=0; d1--){\n for(int d2=0; d2<K; d2++)\n {\n printf(\"%d \", (int)res[d1][d2]);\n }\n printf(\"\\n\");\n }\n };\n };\n \n };\n };\n contours = contours->h_next;\n };\n };\n \n cvReleaseMemStorage( &storage );\n \n cvReleaseImage(&pyr);\n cvReleaseImage(&tmp);\n cvReleaseImage(&gray);\n cvReleaseImage(&tgray);\n \n return fbeacon;\n };\n\nint main(int argc, char *argv[])\n{\n IplImage* img = 0; \n int height,width,step,channels;\n uchar *data;\n int i,j,k;\n\n if(argc<2){\n printf(\"Usage: main <image-file-name>\\n\\7\");\n exit(0);\n }\n\n // load an image \n img=cvLoadImage(argv[1]);\n if(!img){\n printf(\"Could not load image file: %s\\n\",argv[1]);\n exit(0);\n }\n\n // get the image data\n height = img->height;\n width = img->width;\n step = img->widthStep;\n channels = img->nChannels;\n data = (uchar *)img->imageData;\n printf(\"Processing a %dx%d image with %d channels\\n\",height,width,channels); \n\n // create a window\n cvNamedWindow(\"mainWin\", CV_WINDOW_AUTOSIZE); \n cvMoveWindow(\"mainWin\", 100, 100);\n\n // invert the image\n //for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)\n //data[i*step+j*channels+k]=255-data[i*step+j*channels+k];\n\n mycvGetQCodeBeacons(img, 5, 0.438, 2.813);\n // show the image\n cvShowImage(\"mainWin\", img );\n\n // wait for a key\n cvWaitKey(0);\n\n // release the image\n cvReleaseImage(&img );\n return 0;\n}\n</source>\n\n<source lang=\"cpp\">\n#ifndef cvQCodeBeaconsH\n#define cvQCodeBeaconsH\n//---------------------------------------------------------------------------\n#include \"cv.h\" // includes OpenCV definitions\n#include \"highgui.h\" // includes highGUI definitions\n \n struct CvQCodeBeacon {\n \n long int id;\n \n long double rx,ry,rz; \n long double x,y,z; \n long double d; \n \n long double bx,by; \n long double x1,y1,x2,y2; \n \n CvQCodeBeacon* next; \n };\n \n CvQCodeBeacon* mycvGetQCodeBeacons(IplImage *img, int ThresholdSteps, double k_front, double k_side);\n \n#endif\n\n</source>\n\n\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439:\n<blockquote>\ng++ CvQCodeBeacons.cpp -o qcode -I /usr/local/include/opencv/ -L /usr/local/lib -lm -lcv -lhighgui -lcvaux\n</blockquote>\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:\n<blockquote>\n./qcode QCodeBeacon.jpg\n</blockquote>\n\n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:\n[http://lh3.ggpht.com/_cFebWj0ROZk/TGQKPul4UvI/AAAAAAAABRM/VwUlxESd4P4/opencv.JPG]" } ] } } } }