资源简介

使用STC51单片机和OV7670摄像头制作的颜色跟踪程序

资源截图

代码片段和文件信息

#include “EasyTracer.h“
#include “tft.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 = TFT_Get_Pixel(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/(511 - (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;
else
return 0;
}

//搜索腐蚀中心
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);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-09-09 21:37  浅蓝色颜色识别跟踪\
     文件       14357  2014-09-09 21:22  浅蓝色颜色识别跟踪\EasyTracer.LST
     文件       45888  2014-09-09 21:22  浅蓝色颜色识别跟踪\EasyTracer.OBJ
     文件        6163  2014-09-09 14:55  浅蓝色颜色识别跟踪\EasyTracer.c
     文件        1194  2014-09-09 20:40  浅蓝色颜色识别跟踪\EasyTracer.h
     文件         846  2014-09-06 16:10  浅蓝色颜色识别跟踪\OV7670.H
     文件       18391  2014-09-09 21:22  浅蓝色颜色识别跟踪\OV7670.LST
     文件       29211  2014-09-09 21:22  浅蓝色颜色识别跟踪\OV7670.OBJ
     文件        8720  2014-09-09 20:08  浅蓝色颜色识别跟踪\OV7670.c
     文件       32812  2013-05-28 22:07  浅蓝色颜色识别跟踪\STC15Fxxxx.H
     文件      183012  2014-09-09 21:22  浅蓝色颜色识别跟踪\main
     文件        7806  2014-09-09 21:22  浅蓝色颜色识别跟踪\main.LST
     文件       59692  2014-09-09 21:22  浅蓝色颜色识别跟踪\main.M51
     文件       41553  2014-09-09 21:22  浅蓝色颜色识别跟踪\main.OBJ
     文件        3616  2014-09-09 21:22  浅蓝色颜色识别跟踪\main.c
     文件       54261  2014-09-09 21:22  浅蓝色颜色识别跟踪\main.hex
     文件         113  2014-09-09 21:22  浅蓝色颜色识别跟踪\main.lnp
     文件      583456  2014-09-09 21:22  浅蓝色颜色识别跟踪\main.plg
     文件       61574  2014-09-09 21:37  浅蓝色颜色识别跟踪\main.uvopt
     文件       14051  2014-09-09 16:36  浅蓝色颜色识别跟踪\main.uvproj
     文件       60771  2014-09-09 19:38  浅蓝色颜色识别跟踪\main_uvopt.bak
     文件       13559  2014-09-09 14:54  浅蓝色颜色识别跟踪\main_uvproj.bak
     文件        5105  2014-09-09 21:22  浅蓝色颜色识别跟踪\myfun.LST
     文件        5105  2014-09-09 21:22  浅蓝色颜色识别跟踪\myfun.OBJ
     文件        2816  2014-05-22 23:13  浅蓝色颜色识别跟踪\myfun.c
     文件         856  2009-06-19 06:20  浅蓝色颜色识别跟踪\myfun.h
     文件        6104  2014-09-09 21:22  浅蓝色颜色识别跟踪\sccb.LST
     文件       25432  2014-09-09 21:22  浅蓝色颜色识别跟踪\sccb.OBJ
     文件        2757  2014-05-22 23:12  浅蓝色颜色识别跟踪\sccb.c
     文件         337  2014-09-06 15:52  浅蓝色颜色识别跟踪\sccb.h
     文件       17998  2014-09-09 21:22  浅蓝色颜色识别跟踪\tft.LST
............此处省略3个文件信息

评论

共有 条评论