// Various color types
// 0 1 2 3 4 5 6 7 8 9 10
enum {cBLACK=0, cWHITE, cGREY, cRED, cORANGE, cYELLOW, cGREEN, cAQUA, cBLUE, cPURPLE, NUM_COLOR_TYPES};
char* sCTypes[NUM_COLOR_TYPES] = {"Black", "White","Grey","Red","Orange","Yellow","Green","Aqua","Blue","Purple"};
uchar cCTHue[NUM_COLOR_TYPES] = {0, 0, 0, 0, 20, 30, 60, 85, 120, 138 };
uchar cCTSat[NUM_COLOR_TYPES] = {0, 0, 0, 255, 255, 255, 255, 255, 255, 255 };
uchar cCTVal[NUM_COLOR_TYPES] = {0, 255, 120, 255, 255, 255, 255, 255, 255, 255 };
typedef unsigned int uint;
// число пикселей данного цвета на изображении
uint colorCount[NUM_COLOR_TYPES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// Determine what type of color the HSV pixel is. Returns the colorType between 0 and NUM_COLOR_TYPES.
int getPixelColorType(int H, int S, int V)
{
int color = cBLACK;
#if 1
if (V < 75)
color = cBLACK;
else if (V > 190 && S < 27)
color = cWHITE;
else if (S < 53 && V < 185)
color = cGREY;
else
#endif
{
if (H < 7)
color = cRED;
else if (H < 25)
color = cORANGE;
else if (H < 34)
color = cYELLOW;
else if (H < 73)
color = cGREEN;
else if (H < 102)
color = cAQUA;
else if (H < 140)
color = cBLUE;
else if (H < 170)
color = cPURPLE;
else // full circle
color = cRED; // back to Red
}
return color;
} |