资源简介
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位超前进位加法器
相关资源
- SlickEdit 用MDK工具编译STM32的例程
- uIP STM32 TCP Echo
- STM32 TFT液晶驱动与JPEG解码图象显示
- stm32 4*4矩阵键盘
- STM32 步进电机程序 包括加减速 位置模
- STM32F107实现DP83848-UDP-TCP通信程序
- 基于STM32的无位置传感器无刷直流电机
- STM32系列串口烧写工具
- stm32驱动舵机
- WS2812驱动程序SPI+DMA
- STM32固件库文件树及作用详述
- STM32输入捕获PWM,航模遥控器调试。
- stm32_ldwm1000_uwb _twr_all.zip
- DAC8552驱动程序stm32
- 基于STM32的温度采集系统设计.docx
- zw_STM32F1012864液晶字库.zip
- STM32_OLED_三级菜单框架.rar
- IIC通讯,实现多组端口使用
- 板球系统.txt
- STM32F4定时器4输出4路PWM波(寄存器)
- 基于stm32、0.96寸OLED实现的贪吃蛇小游
- STM32最小系统原理图pcb图
- TI杯A题解答
- 适用于2016年省赛电子设计竞赛自动循
- 蓝桥杯嵌入式省赛及国赛所有赛题代
- STM32F103RCT6.zip
- 微雪2.9 E-paper.zip
- 步进初级3--6路步进电机速度控制函数
- STM32精准控制PWM脉冲数_库函数版
- 如何基于STM32系列单片机实现加密保护
评论
共有 条评论