资源简介
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
- 上一篇:根据数据库所取数据画柱状图
- 下一篇:VHDL 32位超前进位加法器
相关资源
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- Scratch 吃豆人追踪者.sb3
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- 运动界面追踪问题 流体力学
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
- 基于STM32芯片的SX1278 驱动 LORA.rar
评论
共有 条评论