zauberstab.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef __FIREVISION_FVUTILS_ZAUBERSTAB_H_
00029 #define __FIREVISION_FVUTILS_ZAUBERSTAB_H_
00030
00031 #include <fvutils/base/types.h>
00032
00033 #include <vector>
00034
00035
00036 namespace firevision {
00037 #if 0
00038 }
00039 #endif
00040
00041
00042
00043 struct ZSlice {
00044 int leftX;
00045 int rightX;
00046 int y;
00047 };
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 class ZRegion {
00059 public:
00060 std::vector<ZSlice*> *slices;
00061 int topSliceY;
00062
00063 ZRegion();
00064 virtual ~ZRegion();
00065 void clear();
00066 };
00067
00068 class Zauberstab {
00069 public:
00070 Zauberstab();
00071 ~Zauberstab();
00072
00073 void setThreshold(unsigned int t);
00074 unsigned int getThreshold();
00075 void setBuffer(unsigned char *b, unsigned int w, unsigned int h);
00076 void findRegion(unsigned int seedX, unsigned int seedY);
00077 void addRegion(unsigned int seedX, unsigned int seedY);
00078 void addRegion(ZRegion *region2);
00079 void deleteRegion();
00080 void deleteRegion(unsigned int seedX, unsigned int seedY);
00081 void deleteRegion(ZRegion *region2);
00082 bool isEmptyRegion();
00083
00084 ZRegion * getRegion() const;
00085 std::vector< fawkes::rectangle_t > getSelection();
00086
00087 private:
00088 unsigned int threshold;
00089 ZRegion *region;
00090 unsigned char *buffer;
00091 unsigned int width;
00092 unsigned int height;
00093
00094 ZRegion* privFindRegion(unsigned int seedX, unsigned int seedY);
00095 ZSlice* findSlice(unsigned int x, unsigned int y,
00096 unsigned int vSeed, int uSeed = -1);
00097 bool isSimilarV(unsigned int v1, unsigned int v2);
00098 bool isSimilarU(unsigned int u1, unsigned int u2);
00099 bool isSimilarUV(unsigned int u1, unsigned int u2,
00100 unsigned int v1, unsigned int v2);
00101 };
00102
00103 }
00104
00105
00106 #endif
00107