资源简介

stm32颜色识别追踪算法。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

资源截图

代码片段和文件信息

#include “EasyTracer.h“

#define min3v(v1 v2 v3)   ((v1)>(v2)? ((v2)>(v3)?(v3):(v2)):((v1)>(v3)?(v3):(v1)))
#define max3v(v1 v2 v3)   ((v1)<(v2)? ((v2)<(v3)?(v3):(v2)):((v1)<(v3)?(v3):(v1)))

typedef struct{
    unsigned char  red;             // [0255]
    unsigned char  green;           // [0255]
    unsigned char  blue;            // [0255]
}COLOR_RGB;//RGB格式颜色

typedef struct{
    unsigned char hue;              // [0240]
    unsigned char saturation;       // [0240]
    unsigned char luminance;        // [0240]
}COLOR_HSL;//HSL格式颜色

typedef struct{
    unsigned int X_Start;
    unsigned int X_End;
unsigned int Y_Start;
    unsigned int Y_End;
}SEARCH_AREA;//区域

//读取RBG格式颜色,唯一需要移植的函数
extern unsigned short GUI_ReadBit16Point(unsigned short xunsigned short y);
static void ReadColor(unsigned int xunsigned int yCOLOR_RGB *Rgb)
{
unsigned short C16;

C16 = GUI_ReadBit16Point(xy);

Rgb->red   =  (unsigned char)((C16&0xf800)>>8);
Rgb->green =  (unsigned char)((C16&0x07e0)>>3);
Rgb->blue  =     (unsigned char)((C16&0x001f)<<3);
}



//RGB转HSL
static void RGBtoHSL(const COLOR_RGB *Rgb COLOR_HSL *Hsl)
{
    int hslmaxValminValdifVal;
int r  = Rgb->red;
int g  = Rgb->green;
    int b  = Rgb->blue;

maxVal = max3v(r g b);
minVal = min3v(r g b);

difVal = maxVal-minVal;

//计算亮度
    l = (maxVal+minVal)*240/255/2;

if(maxVal == minVal)//若r=g=b
{
h = 0;
s = 0;
}
else
{
//计算色调
if(maxVal==r)
{
if(g>=b)
h = 40*(g-b)/(difVal);
else
h = 40*(g-b)/(difVal) + 240;
}
else if(maxVal==g)
h = 40*(b-r)/(difVal) + 80;
else if(maxVal==b)
h = 40*(r-g)/(difVal) + 160;
//计算饱和度
if(l == 0)
s = 0;
else if(l<=120)
s = (difVal)*240/(maxVal+minVal);
else
s = (difVal)*240/(480 - (maxVal+minVal));
}
    Hsl->hue =        (unsigned char)(((h>240)? 240 : ((h<0)?0:h)));
    Hsl->saturation = (unsigned char)(((s>240)? 240 : ((s<0)?0:s)));
    Hsl->luminance =  (unsigned char)(((l>240)? 240 : ((l<0)?0:l)));
}

//匹配颜色
static int ColorMatch(const COLOR_HSL *Hslconst TARGET_CONDI *Condition)
{
if(
Hsl->hue > Condition->H_MIN &&
Hsl->hue < Condition->H_MAX &&
Hsl->saturation > Condition->S_MIN &&
Hsl->saturation <   Condition->S_MAX &&
Hsl->luminance > Condition->L_MIN &&
Hsl->luminance <   Condition->L_MAX
    )
return 1;   //成功返回1
else
return 0;
}

//搜索腐蚀中心  成功返回1
static int SearchCentre(unsigned int *xunsigned int *yconst TARGET_CONDI *Conditionconst SEARCH_AREA *Area)
{
unsigned int SpaceXSpaceYijkFailCount=0;
COLOR_RGB Rgb;
COLOR_HSL Hsl;

SpaceX = Condition->WIDTH_MIN/3;
SpaceY = Condition->HIGHT_MIN/3;

for(i=Area->Y_Start;iY_End;i+=SpaceY)
{
for(j=Area->X_Start;jX_End;j+=SpaceX)
{
FailCount=0;
for(k=0;k {
if(k ReadColor(j+ki+SpaceY/2&Rgb);
else
ReadColor(j+SpaceX

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6145  2017-08-10 09:22  stm32颜色识别追踪算法\EasyTrace\EasyTracer.c

     文件       1194  2012-09-28 19:58  stm32颜色识别追踪算法\EasyTrace\EasyTracer.h

     目录          0  2017-08-10 09:22  stm32颜色识别追踪算法\EasyTrace

     目录          0  2018-04-16 19:57  stm32颜色识别追踪算法

----------- ---------  ---------- -----  ----

                 7339                    4


评论

共有 条评论