OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2501|回复: 2

关于STM32F103+OV7670(带FIFO)采集单位区域内颜色块数据错误的问题,求各位大佬指导指导!!!

[复制链接]

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-11-19
在线时间
6 小时
发表于 2017-10-25 17:26:45 | 显示全部楼层 |阅读模式
1金钱
最近用STM32F103+OV7670(带FIFO)做一个单位区域内颜色块的识别功能,前期采用的原子哥的MINI板摄像头例程,自己在上面做了修改,现在遇到的问题就是:我自定义采集的单位区域40*80像素,直接把FIFO里面的color(RGB565格式)单位区域内数据取出来,暂时定A4白纸为被拍摄颜色块(加了一颗白光LED做补光灯),然后通过串口的方式将3200个像素点的打印出来并作为颜色参考标准放在程序里的一个u16 Standard_Data[3200]数组里面,并以此数组里的数据作为参考标准和我采集到的颜色块(还是A4白纸,采集区域还是40*80大小)像素点数据一一对比,两个数组里面对应元素数据相同则设定OK_Count变量累计成功次数,反之则设定Erro_Count变量累计错误次数,采用按键触发调用camera_refresh()函数,几次测试下来发现数据差异太大,有时候正确率不到50%!!!请问各位大佬们,为什么同样光照下同样的颜色块的RGB565像素数据会不一样呢?这样的话就无法实现颜色块识别功能了,求各位大佬指导指导,小弟万分感谢!!!
  附主要部分程序:
       void Read_Data()
{
       
         for(j=0;j<dpi;j++)                //32200
                {
                        GPIOB->CRL=0X88888888;                  
                        OV7670_RCK=0;
                        color=OV7670_DATA;                //读数据
                        OV7670_RCK=1;        
                        color<<=8;                                          
                        OV7670_RCK=0;
                        color|=OV7670_DATA;                //读数据                       
                        OV7670_RCK=1;
                        GPIOB->CRL=0X33333333;                                                          
                        LCD_WR_DATA(color);         
                        Picture_Data[j]=color;           //将FIFO的RGB565像素点数据放到Picture_Data[]里形成整个图像
                        if(j<=dpi)
                        {
                       
//   printf("0x%04X, \r",Picture_Data[j]);       //采集参考图像标准像素点用,后面做图像对比时就屏蔽该语句
                        }
                }  

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-11-19
在线时间
6 小时
 楼主| 发表于 2017-10-25 17:30:06 | 显示全部楼层
附加像素点数据对比程序:void Data_Check() {          u32 m;         for(m=0;m<dpi;m++)         {                         if(Standard_Data[m]==Picture_Data[m])                         {                                  OK_Count++;          //à&#219;&#188;&#198;êy&#190;Y&#182;&#212;±è&#213;yè·′&#206;êy                                   if(OK_Count>dpi )                                         {                                                 OK_Count=0;                                         }                         }                         else                          {                                  Erro_Count++;        //à&#219;&#188;&#198;êy&#190;Y&#182;&#212;±è′í&#206;ó′&#206;êy                                 if(Erro_Count>dpi )                                         {                                                 Erro_Count=0;                                         }                         }                                  }         printf("OK_Count:    %d \r\n",OK_Count);         printf("Erro_Count:    %d \r\n",Erro_Count);         printf("SUM:    %d \r\n",(OK_Count+Erro_Count));         printf("-----------------------------------\r\n");
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-11-19
在线时间
6 小时
 楼主| 发表于 2017-10-25 17:34:23 | 显示全部楼层
附加采集图像像素点数据与参考图像像素点数据对比程序:
  void Data_Check()
{
         u32 m;
        for(m=0;m<dpi;m++)
        {
                        if(Standard_Data[m]==Picture_Data[m])    //将Standard_Data[]里的参考图像数据与采集到的图像Picture_Data[]逐次每个像素点扫描对比
                        {
                                 OK_Count++;                                       //对比成功次数累计
                                  if(OK_Count>dpi )
                                        {
                                                OK_Count=0;
                                        }
                        }
                        else
                        {
                                 Erro_Count++;                                              //对比错误次数累计
                                if(Erro_Count>dpi )
                                        {
                                                Erro_Count=0;
                                        }
                        }
                       
        }
        printf("OK_Count:    %d \r\n",OK_Count);
        printf("Erro_Count:    %d \r\n",Erro_Count);
        printf("SUM:    %d \r\n",(OK_Count+Erro_Count));
        printf("-----------------------------------\r\n");
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 14:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表