Hauptseite | Liste aller Namensbereiche | Klassenhierarchie | Alphabetische Liste | Übersicht | Auflistung der Dateien | Elemente eines Namensbereiches | Datenstruktur-Elemente | Datei-Elemente

findleds.h

gehe zur Dokumentation dieser Datei
00001 #ifndef SEARCHLEDSOUTPUT_H
00002 #define SEARCHLEDSOUTPUT_H
00003 
00004 #include "output.h"
00005 #include "../recognition/findleds.h"
00006 #include <string>
00007 
00008 extern "C"
00009 {
00010   #include <opencv/highgui.h>
00011 }
00012 
00013 namespace seemicro
00014 {
00015 
00019 class FindLEDSOutput : public OutputModule
00020 {
00021   FindLEDSModule& src;
00022   static FindLEDSOutput *home;
00023   string windowname;
00024   IplImage *img;
00025   CvFont *font;
00026 
00027 public:
00028   /*
00029    * Legt fest, welches Bild als Hintergrund verwendet wird
00030    *  0 = Ausgabebild von FloodFill
00031    *  1 = Eingabebild von FloodFill
00032    */
00033   int whichSrc;
00034 
00035   FindLEDSOutput(FindLEDSModule& Asrc, string Awindowname, CvFont *Af) :
00036     src(Asrc), windowname(Awindowname), font(Af)
00037   {
00038     home = this;
00039     cvNamedWindow(windowname.c_str(), 1);
00040     img = cvCreateImage(cvSize(src.img->width, src.img->height), IPL_DEPTH_8U, 3);
00041     whichSrc=1;// verwende FloodFills Eingabebild
00042   };
00043 
00044   ~FindLEDSOutput()
00045   {
00046     cvDestroyWindow(windowname.c_str());
00047     cvReleaseImage(&img);
00048   }
00049 
00050   void output(bool keyframe)
00051   {
00052     if(!src.outputChanged) return;
00053     //if(!keyframe) return;
00054 
00055 
00056     if(whichSrc==0)
00057       // Ausgabebild von FloodFill (Markerbild) als Hintergrund
00058       src.FloodFillMarks2Colors(img);
00059     else if(whichSrc==1)
00060       // Eingabebild von FloodFill (Kamerabild) als Hintergrund
00061       cvConvertImage(src.src.img, img);
00062 
00063     cvCircle(img, src.micro.mitte, 3, CV_RGB(200, 255, 150));
00064     cvCircle(img, src.micro.mitte, int(src.micro.radius), CV_RGB(100, 155, 150));
00065 
00066     char text[100];
00067     for(int i=0; i<src.markiert; i++)
00068     {
00069       // Schwerpunkt markieren
00070       if(src.anzahl[i] == 0) continue;// als gelöscht gekennzeichneter Schwerpunkt
00071       cvCircle(img, src.micro.mitte+src.markierungen[i], 5,
00072         CV_RGB(200, 200, 250));
00073 
00074       if(src.eva) // nur im Eva-Modus
00075       {
00076         // Ansatzpunkt markieren
00077         double c = CV_RGB(155, 50, 50);
00078         if(src.gewaehlt[i]) c = CV_RGB(255, 150, 150);
00079 
00080         mypoint p0 = src.micro.mitte + mypoint(
00081             int(cos(src.gamma0[i])*src.micro.radius),
00082             -int(sin(src.gamma0[i])*src.micro.radius) );
00083         //cerr << "gamma: " << int(src.gamma0[i]/M_PI*180) << "° p: " << p0 << endl;
00084         cvCircle(img, p0, 5, CV_RGB(255, 100, 100));
00085 
00086         if(src.gewaehlt[i])
00087         {
00088           p0 = src.micro.mitte + mypoint(
00089               int(cos(src.gamma0[i])*src.micro.radius*1.3),
00090               -int(sin(src.gamma0[i])*src.micro.radius*1.3) );
00091           sprintf(text, "#%d", src.armnummer[i]);
00092           cvPutText(img, text, p0, font, CV_RGB(255, 255, 255));
00093         }
00094       }
00095     }
00096 
00097     // blaues Rechteck um ROI zeichnen
00098     cvRectangle(img, src.ROI.p1(), src.ROI.p2(), CV_RGB(0, 0, 255));
00099 
00100     sprintf(text, "Alpha=%d", int(src.micro.alpha*180/M_PI));
00101     cvPutText(img, text, cvPoint(img->width-110, 30), font, CV_RGB(255, 255, 255));
00102 
00103     cvShowImage(windowname.c_str(), img);
00104     cvResizeWindow(windowname.c_str(), img->width+15, img->height+55);
00105     src.outputChanged = false;
00106   }
00107 
00108   static void callback(int dummy=0)
00109   {
00110     if(!home) return;
00111   }
00112 
00113 }; // SearchLEDSOutput
00114 
00115 } // seemicro
00116 
00117 #endif
00118 

Erzeugt am Sun Oct 3 12:52:47 2004 für seemicro von doxygen 1.3.2