资源简介
使用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个文件信息
相关资源
- 基于51单片机的4路智能抢答器
- 在51单片机上实现的完整功能的计算器
- arm板上实现usb摄像头采集及显示(q
- 基于labview通过usb摄像头采集图像子
- 利用51单片机产生可调PWM波
- 51单片机延时算法
- 基于51单片机的智能窗帘系统全套资料
- 51单片机频率精确测量C程序
- 肺活量监测,程序部分,STC89C51单片机
- 肺活量监测,STC89C51单片机和AD0832AD转
- 51单片机的计算器.rar
- CCD摄像头程序,舵机,电机控制程序
- 51智能小车避障和循迹程序
- 51单片机+12864实现的万年历程序
- 51单片机pwm波,lcd1602,l298n带prtues仿真
- 51单片机8位数码管动态扫描显示
- 树莓派驱动ov7670 带fifo版
- 128芯片摄像头采集程序
- 基于51单片机和8279的光电计数器
- 单片机电子时钟设计
- 51单片机增量式PID控制算法
- 小觅代码实现
- opencv调用摄像头并截图保存
- GM65之51单片机(串口+显示屏)程序
- 使用51单片机控制nRF24L01的多种例程
- 树莓派摄像头资料和例程
- proteus中51单片机制作的电子琴
- 51单片机温度传感器程序
- 基于51单片机的抽奖系统
- 基于51单片机的多功能电子时钟汇编
评论
共有 条评论