資源簡介
使用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個文件信息
評論
共有 條評論