24612|15

60

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

基于STM32F7的视觉小球颜色识别系统--完结 [复制链接]

 
本帖最后由 wwchang 于 2015-12-28 10:29 编辑

项目名称:基于STM32F7的视觉小球颜色识别系统
项目简介:
STM32F7驱动摄像头,实时采集图像,进行颜色识别,并且统计出小球的直径。做图像处理都是基于PC端的开发,一直希望STM32可以用。后续可以加入其它的一些算法,比如字符识别,人脸识别等。
预期成果(1221日前):
9.21-10.21熟练开发板的各个外设,特别是摄像头接口外设调试。
10.21-12.10整体程序连调,算法撰写。
12.10-12.21最终调试,实现颜色识别和统计小球的直径。

项目组成员分工:
  
wwchang
  
电子程序撰写,图像处理算法撰写,电子电路设计
总的管理调度,图像处理算法撰写。
54chenjq
系统移植,图像处理算法
图像处理算法撰写
卜道翁先生
熟悉ST所有产品线,图像处理算法
图像处理算法修正,系统移植,
DavidZH
STM32F4\F1芯片及UCOSII系统的移植、LWIP协议栈的应用
界面的编写、UCOS系统移植
  
  
efree
模拟电路设计经验,pcb设计,工业电子产品设计经验
硬件电路设计


调试与分享:

  
9-10.21
  
熟悉F7的开发环境的各个外围,摄像头接口调试
1.开箱图片和开机图片分享
  
2.各个外设程序分享
  
3.摄像头驱动程序分享
10.21-12.10
程序连调,图像处理算法撰写
1.      各个模块连调程序分享
  
2.      图像处理程序分享
12.10-12.21
最终调试,实现小球的颜色识别并统计小球直径
1.      最终调试程序分享
  
2.      实现颜色识别程序并分享
  
3.      直径测量程序并分享


请各个组员按照进度进行项目合作。把每次实验的成果共享在这个帖子上。  
无论电路和程序,希望大家有一点进展,就可以在这个帖子上跟帖子。
@54chenjq   @卜道翁先生  @DavidZH  @efree   

项目名称:基于STM32F7的视觉小球颜色识别系统
1.功能实现:用STM32F7驱动摄像头,实时采集图像,进行颜色识别,并且统计出小球的直径。2.软硬件方案:


   a.硬件实现框图

本方案我们采用了OV9655的130万像素摄像头,并通过转接板自己设计的,配合STM32F746自带的摄像头接口。如图所示:

硬件电路:
摄像头转接板.rar (97.61 KB, 下载次数: 145)
[size=0.83em]163313xeoqankgtphqzk4a.jpg.thumb.jpg(65.09 KB, 下载次数: 0)
下载附件  [url=]保存到相册[/url]
[color=rgb(153, 153, 153) !important]昨天 21:05 上传




   b.软件实现框图

整个软件主要包括包括:摄像头OV9655驱动的实现,图像颜色识别算法实现,图像尺寸检测算法检测等
算法的主要思想如下:
有过使用photoshop经历的人对色彩模式应该不会陌生,大家应该非常熟悉的是RGB色彩模式,因为它是最常见的也是听说最多的,另外还有一种色彩模式是HSL,H代表色相,S代表饱和度,L代表亮度,这种色彩模式是美术人最常用的,这是因为它是基于人对色彩的心理感受的一种色彩模式。
RGB向HSL色彩模式的转换在图像处理中应用较为广泛,我们的小球识别中很可能需要该步骤,原理与公式讲起来需要太多的时间与空间,大家可能也不希望听我啰嗦,那么我就把代码传上来吧。
#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;             // [0,255]
    unsigned char  green;           // [0,255]
    unsigned char  blue;            // [0,255]
}COLOR_RGB;//RGB格式颜色


typedef struct{
    unsigned char hue;              // [0,240]
    unsigned char saturation;       // [0,240]
    unsigned char luminance;        // [0,240]
}COLOR_HSL;//HSL格式颜?


//RGB转HSL
static void RGBtoHSL(const COLOR_RGB *Rgb, COLOR_HSL *Hsl)
{
    int h,s,l,maxVal,minVal,difVal;
        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)));
}
  c 软件界面

3.演示视频:
OV9655图像处理视频
4.源码:
小球颜色尺寸识别源码.zip (857.25 KB, 下载次数: 997)
5.参考文档和例程:
在stm32上实现颜色跟踪 .pdf (3.77 MB, 下载次数: 3867)
STM32F4DIS-CAM REV1.0.pdf (18.44 KB, 下载次数: 385)
EasyTrace演示工程.zip (313.06 KB, 下载次数: 571)
6.项目帖子:  
基于STM32F7的视觉小球颜色识别系统--开箱照
基于STM32F7的视觉小球颜色识别系统---摄像头转接板原理图
硬件完结篇
软件规划篇
摄像头效果
物体跟踪效果
7.项目完成致谢:
这个项目结构完成,首先离不开几个组员努力的结果:@54chenjq  @DavidZH  @efree  等三位组员的辛苦努力。感谢管理员@nmg的支持,也要感谢IC-爬虫哥的技术支持。 由于时间有限,我们的项目还有很多功能没有完成,后续还会加入字符识别,人脸识别。谢谢EEWROLD,谢谢ST,给了我们这么好的一个学习机会!












此帖出自stm32/stm8论坛

最新回复

楼主 你好 我想正在做小球识别用你的算法 返回的全是0 根本无返回值 是什么原因   详情 回复 发表于 2017-8-4 15:07
点赞 关注(8)
 

回复
举报

1310

帖子

3

TA的资源

一粒金砂(高级)

沙发
 
本帖最后由 54chenjq 于 2015-10-20 21:05 编辑

我遇到一个很不幸的事情,我用的操作系统是RT_THREAD,我自己搞的fafts移植,今天上午做图像处理的时候还是OK 的,晚上加了一几条语句,突然IAR就无法go to define了,随之而来我发现文件系统读取图像时进入了死等状态,我晚上要好好思考一下,明天我争取重新搞搞FAFTS.此外,图像处理算法的这一块也比较头疼,有时在PC上一句话的事在板子上需要琢磨琢磨,我尽快整理一下发布吧
此帖出自stm32/stm8论坛

点评

好的,秦皇哥用IAR的呀。。  详情 回复 发表于 2015-10-21 08:53
 
个人签名

RTEMS

 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
54chenjq 发表于 2015-10-20 21:01
我遇到一个很不幸的事情,我用的操作系统是RT_THREAD,我自己搞的fafts移植,今天上午做图像处理的时候还是 ...

好的,秦皇哥用IAR的呀。。
此帖出自stm32/stm8论坛

点评

没关系,我这周末把我的工程换成MDK。  详情 回复 发表于 2015-10-21 22:20
 
 

回复

1310

帖子

3

TA的资源

一粒金砂(高级)

4
 
wwchang 发表于 2015-10-21 08:53
好的,秦皇哥用IAR的呀。。

没关系,我这周末把我的工程换成MDK。
此帖出自stm32/stm8论坛
 
个人签名

RTEMS

 
 

回复

1310

帖子

3

TA的资源

一粒金砂(高级)

5
 
晚上失眠,记录点东西,内容是关于色彩模式的,以及相互转换关系。
有过使用photoshop经历的人对色彩模式应该不会陌生,大家应该非常熟悉的是RGB色彩模式,因为它是最常见的也是听说最多的,另外还有一种色彩模式是HSL,H代表色相,S代表饱和度,L代表亮度,这种色彩模式是美术人最常用的,这是因为它是基于人对色彩的心理感受的一种色彩模式。
RGB向HSL色彩模式的转换在图像处理中应用较为广泛,我们的小球识别中很可能需要该步骤,原理与公式讲起来需要太多的时间与空间,大家可能也不希望听我啰嗦,那么我就把代码传上来吧。
#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;             // [0,255]
    unsigned char  green;           // [0,255]
    unsigned char  blue;            // [0,255]
}COLOR_RGB;//RGB格式颜色


typedef struct{
    unsigned char hue;              // [0,240]
    unsigned char saturation;       // [0,240]
    unsigned char luminance;        // [0,240]
}COLOR_HSL;//HSL格式颜?


//RGB转HSL
static void RGBtoHSL(const COLOR_RGB *Rgb, COLOR_HSL *Hsl)
{
    int h,s,l,maxVal,minVal,difVal;
        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)));
}


代码是我们爬虫哥共享的,这几天在非常认真的研究

此帖出自stm32/stm8论坛

点评

好的,还是自己发个帖子吧,我把你的帖子再放到我的帖子里面来  详情 回复 发表于 2015-10-22 10:31
 
个人签名

RTEMS

 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

6
 
54chenjq 发表于 2015-10-21 22:55
晚上失眠,记录点东西,内容是关于色彩模式的,以及相互转换关系。
有过使用photoshop经历的人对色彩模式 ...

好的,还是自己发个帖子吧,我把你的帖子再放到我的帖子里面来
此帖出自stm32/stm8论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

7
 
转接板已经焊接完毕,等待测试。。。

QQ图片20151023163324.jpg (143.48 KB, 下载次数: 3)

QQ图片20151023163324.jpg
此帖出自stm32/stm8论坛

点评

好的  详情 回复 发表于 2015-10-23 20:43
 
 
 

回复

1310

帖子

3

TA的资源

一粒金砂(高级)

8
 
efree 发表于 2015-10-23 16:33
转接板已经焊接完毕,等待测试。。。

好的
此帖出自stm32/stm8论坛
 
个人签名

RTEMS

 
 

回复

6105

帖子

4

TA的资源

版主

9
 
点赞点赞
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

10
 
终于告一段落了,后续大家还需努力。
此帖出自stm32/stm8论坛
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

11
 
楼主   你们源码工程是不完整的  我想跟你们学习一下用DCMI控制coms摄像头
此帖出自stm32/stm8论坛

点评

因为我们用的是F7的库例程调的,所以程序量特别大,我们现在把主要的源码放上去了,这样,我给一个百度云盘链接吧。http://pan.baidu.com/s/1i4kpyfz 在STM32Cube_FW_F7_V1.1.0\Projects\STM32746G-Discovery\Templ  详情 回复 发表于 2015-12-31 09:20
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

12
 
zhanghuichun 发表于 2015-12-30 20:39
楼主   你们源码工程是不完整的  我想跟你们学习一下用DCMI控制coms摄像头

因为我们用的是F7的库例程调的,所以程序量特别大,我们现在把主要的源码放上去了,这样,我给一个百度云盘链接吧。http://pan.baidu.com/s/1i4kpyfz  在STM32Cube_FW_F7_V1.1.0\Projects\STM32746G-Discovery\Templates\EWARM
此帖出自stm32/stm8论坛
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(中级)

13
 
楼主,哪个转接板还有剩下的吗,能够卖我一块不?想要用F7开发板的接口玩一下摄像头,官方的一个0V9655的转接模块就要250左右,实在是伤不起
此帖出自stm32/stm8论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

14
 
也想弄个转接板,如果团购,应该会有很多人想买的吧!
此帖出自stm32/stm8论坛
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(中级)

15
 
楼主,想问下,这个加上UART6之后,传图像数据给电脑,加上之后为啥串口不好使?
此帖出自stm32/stm8论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

16
 
楼主 你好 我想正在做小球识别用你的算法 返回的全是0 根本无返回值 是什么原因
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表