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
00037
00038 struct ZSlice {
00039 int leftX;
00040 int rightX;
00041 int y;
00042 };
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 class ZRegion {
00054 public:
00055 std::vector<ZSlice*> *slices;
00056 int topSliceY;
00057
00058 ZRegion();
00059 virtual ~ZRegion();
00060 void clear();
00061 };
00062
00063 class Zauberstab {
00064 public:
00065 Zauberstab();
00066 ~Zauberstab();
00067
00068 void setThreshold(unsigned int t);
00069 unsigned int getThreshold();
00070 void setBuffer(unsigned char *b, unsigned int w, unsigned int h);
00071 void findRegion(unsigned int seedX, unsigned int seedY);
00072 void addRegion(unsigned int seedX, unsigned int seedY);
00073 void addRegion(ZRegion *region2);
00074 void deleteRegion();
00075 void deleteRegion(unsigned int seedX, unsigned int seedY);
00076 void deleteRegion(ZRegion *region2);
00077 bool isEmptyRegion();
00078
00079 ZRegion * getRegion() const;
00080 std::vector< fawkes::rectangle_t > getSelection();
00081
00082 private:
00083 unsigned int threshold;
00084 ZRegion *region;
00085 unsigned char *buffer;
00086 unsigned int width;
00087 unsigned int height;
00088
00089 ZRegion* privFindRegion(unsigned int seedX, unsigned int seedY);
00090 ZSlice* findSlice(unsigned int x, unsigned int y,
00091 unsigned int vSeed, int uSeed = -1);
00092 bool isSimilarV(unsigned int v1, unsigned int v2);
00093 bool isSimilarU(unsigned int u1, unsigned int u2);
00094 bool isSimilarUV(unsigned int u1, unsigned int u2,
00095 unsigned int v1, unsigned int v2);
00096 };
00097
00098
00099 #endif
00100