Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Плагин wdx который показывает основной цвет картинки 
Author Message
cojoc



PostPosted: Thu Jun 06, 2013 20:04    Post subject: Reply with quote

MVV wrote:
описать нужные цвета в виде диапазонов


Поискал реализацию как определить оттенки в 12 цветов, нашёл (если я правильно понял сам код) как раз на основе диапазонов в пространстве HSV:
http://robocraft.ru/blog/computervision/1063.html

кусок кода
Code:
// 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;
}
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group