00001 #ifndef CANNYMODULE_H
00002 #define CANNYMODULE_H
00003
00004 #include "../recognition/videodevice.h"
00005 #include "imagesource.h"
00006
00007 namespace seemicro
00008 {
00009
00010 struct CannyModule : public ImageSource
00011 {
00012 int canny1, canny2;
00013 ImageSource& src;
00014
00015 CannyModule(ImageSource& As) : src(As)
00016 {
00017 canny1 = 50;
00018 canny2 = 80;
00019 img = cvCreateImage(cvSize(src.img->width, src.img->height), IPL_DEPTH_8U, 1);
00020 }
00021
00022 ~CannyModule()
00023 {
00024 cvReleaseImage(&img);
00025 }
00026
00035 void processFrame(myrect *ROI=NULL)
00036 {
00037 #ifdef DEBUG
00038 if(DEBUGLEVEL>=3) cerr << "->" << __PRETTY_FUNCTION__ << "\n";
00039 #endif
00040
00041
00042
00043
00044
00045
00046 myrect ROI2;
00047 if(!ROI || ROI->r.x+ROI->r.width > src.img->width
00048 || ROI->r.y+ROI->r.height> src.img->height )
00049 ROI2 = myrect(0, 0, src.img->width, src.img->height);
00050 else ROI2 = *ROI;
00051
00052
00053 CvMat ausschnitt1;
00054 cvGetSubRect(src.img, &ausschnitt1, ROI2);
00055
00056
00057 CvMat ausschnitt2;
00058 cvGetSubRect(img, &ausschnitt2, ROI2);
00059 cvCanny(&ausschnitt1, &ausschnitt2,
00060 canny1,
00061 canny2,
00062 3);
00063
00064 paramChanged = false;
00065 outputChanged = true;
00066 #ifdef DEBUG
00067 if(DEBUGLEVEL>=3) cerr << "<-CannyModule::processFrame()\n";
00068 #endif
00069 }
00070
00071 void processKeyFrame(void)
00072 {
00073 #ifdef DEBUG
00074 if(DEBUGLEVEL>=3) cerr << "->CannyModule::processKeyFrame()\n";
00075 #endif
00076 cvCanny(src.img, img,
00077 canny1,
00078 canny2,
00079 3);
00080
00081 paramChanged = false;
00082 outputChanged = true;
00083 #ifdef DEBUG
00084 if(DEBUGLEVEL>=3) cerr << "<-CannyModule::processKeyFrame()\n";
00085 #endif
00086 }
00087
00088 };
00089
00090 }
00091
00092 #endif // RECOGNITIONMODULE_H