专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
有没有哪位用stm32做颜 {MOD}识别的!求助啊
2019-07-14 23:44
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
6684
17
1267
我用32识别魔方颜 {MOD},用的是RGB转HSI识别魔方颜 {MOD},
发现橙 {MOD}和红 {MOD}非常难分辨别,转换后的红 {MOD}、橙 {MOD}S 和 I值基本没多大差别,
H值红 {MOD}在32以下,橙 {MOD}在28----40之间,有重复,总是容易出错,怎么解决啊!
求高人指点,能通俗讲解最好!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
xshenpan
2019-07-16 17:29
本帖最后由 xshenpan 于 2014-5-12 10:35 编辑
shixiaogang 发表于 2014-5-11 20:57
RGB是如何实现转HSI的啊?求楼主给我一下代码,我也在做颜 {MOD}识
别
#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 hsicolor
{
int16_t H;
int16_t S;
int16_t I;
}HSI_ColorTypeDef;
typedef struct rgbcolor
{
u8 R;
u8 G;
u8 B;
}RGB_ColorTypeDef;
//公式参考http://blog.sina.com.cn/s/blog_a5b3ed560100yo26.html
// H>=0 && H<=360 S>=0 && S<=100 I>=0 && I<=100
HSI_ColorTypeDef RGB565ToHSI(u16 rgb)
{
u16 Max,Min;
float delta;
RGB_ColorTypeDef RGBColor;
HSI_ColorTypeDef HSIColor;
RGBColor.R = ((rgb & 0xf800) >> 8);
RGBColor.G = ((rgb & 0x07e0) >> 3);
RGBColor.B = ((rgb & 0x001f) << 3); //将RGB565化为RGB888
Min = min3v(RGBColor.R,RGBColor.G,RGBColor.B);
Max = max3v(RGBColor.R,RGBColor.G,RGBColor.B);
delta = Max - Min;
if(Max == RGBColor.R)
HSIColor.H = (int16_t)(60.0f*((RGBColor.G-RGBColor.B)/delta));
else if(Max == RGBColor.G)
HSIColor.H = (int16_t)(60.0f*((RGBColor.B - RGBColor.R)/delta))+120;
else //if(Max == RGBColor.B)
HSIColor.H = (int16_t)(60.0f*((RGBColor.R - RGBColor.G)/delta))+240;
if(HSIColor.H < 0)
HSIColor.H+=360;
HSIColor.I = (int16_t)((Max + Min)*0.1961f); //I = (int16_t)((Max + Min)*1.0f/2/255.0*100);
if(HSIColor.I <= 50)
HSIColor.S = (delta/(Max + Min))*100;
else
if(Max != 255 || Min != 255)
HSIColor.S = delta*100.0f/(510 - (Max + Min));
else
HSIColor.S = 0;
return HSIColor;
}
复制代码
加载中...
查看其它17个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- #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 hsicolor
- {
- int16_t H;
- int16_t S;
- int16_t I;
- }HSI_ColorTypeDef;
- typedef struct rgbcolor
- {
- u8 R;
- u8 G;
- u8 B;
- }RGB_ColorTypeDef;
- //公式参考http://blog.sina.com.cn/s/blog_a5b3ed560100yo26.html
- // H>=0 && H<=360 S>=0 && S<=100 I>=0 && I<=100
- HSI_ColorTypeDef RGB565ToHSI(u16 rgb)
- {
- u16 Max,Min;
- float delta;
- RGB_ColorTypeDef RGBColor;
- HSI_ColorTypeDef HSIColor;
-
- RGBColor.R = ((rgb & 0xf800) >> 8);
- RGBColor.G = ((rgb & 0x07e0) >> 3);
- RGBColor.B = ((rgb & 0x001f) << 3); //将RGB565化为RGB888
-
- Min = min3v(RGBColor.R,RGBColor.G,RGBColor.B);
- Max = max3v(RGBColor.R,RGBColor.G,RGBColor.B);
- delta = Max - Min;
-
- if(Max == RGBColor.R)
- HSIColor.H = (int16_t)(60.0f*((RGBColor.G-RGBColor.B)/delta));
- else if(Max == RGBColor.G)
- HSIColor.H = (int16_t)(60.0f*((RGBColor.B - RGBColor.R)/delta))+120;
- else //if(Max == RGBColor.B)
- HSIColor.H = (int16_t)(60.0f*((RGBColor.R - RGBColor.G)/delta))+240;
-
- if(HSIColor.H < 0)
- HSIColor.H+=360;
-
- HSIColor.I = (int16_t)((Max + Min)*0.1961f); //I = (int16_t)((Max + Min)*1.0f/2/255.0*100);
-
- if(HSIColor.I <= 50)
- HSIColor.S = (delta/(Max + Min))*100;
- else
- if(Max != 255 || Min != 255)
- HSIColor.S = delta*100.0f/(510 - (Max + Min));
- else
- HSIColor.S = 0;
-
- return HSIColor;
- }
复制代码一周热门 更多>