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
00030
00031
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;
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
00054
00055
00056 if(whichSrc==0)
00057
00058 src.FloodFillMarks2Colors(img);
00059 else if(whichSrc==1)
00060
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
00070 if(src.anzahl[i] == 0) continue;
00071 cvCircle(img, src.micro.mitte+src.markierungen[i], 5,
00072 CV_RGB(200, 200, 250));
00073
00074 if(src.eva)
00075 {
00076
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
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
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 };
00114
00115 }
00116
00117 #endif
00118