关于STM32F103+OV7670(带FIFO)采集单位区域内颜 {MOD}块数据错误的问题,求各位大佬...

2019-03-23 17:28发布


[tr][td]最近用STM32F103+OV7670(带FIFO)做一个单位区域内颜 {MOD}块的识别功能,前期采用的原子哥的MINI板摄像头例程,自己在上面做了修改,现在遇到的问题就是:我自定义采集的单位区域40*80像素,直接把FIFO里面的color(RGB565格式)单位区域内数据取出来,暂时定A4白纸为被拍摄颜 {MOD}块(加了一颗白光LED做补光灯),然后通过串口的方式将3200个像素点的打印出来并作为颜 {MOD}参考标准放在程序里的一个u16 Standard_Data[3200]数组里面,并以此数组里的数据作为参考标准和我采集到的颜 {MOD}块(还是A4白纸,采集区域还是40*80大小)像素点数据一一对比,两个数组里面对应元素数据相同则设定OK_Count变量累计成功次数,反之则设定Erro_Count变量累计错误次数,采用按键触发调用camera_refresh()函数,几次测试下来发现数据差异太大,有时候正确率不到50%!!!请问各位大佬们,为什么同样光照下同样的颜 {MOD}块的RGB565像素数据会不一样呢?这样的话就无法实现颜 {MOD}块识别功能了,求各位大佬指导指导,小弟万分感谢!!!

附采集数据部分代码:
//****************************************************************************************************
//       采集数据部分代码:
//****************************************************************************************************
     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, ",Picture_Data[j]);       //采集参考图像标准像素点用,后面做图像对比时就屏蔽该语句
                        }
                }  

}

//****************************************************************************************************
//       采集图像像素点数据与参考图像像素点数据对比程序:
//****************************************************************************************************
  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 ",OK_Count);
        printf("Erro_Count:    %d ",Erro_Count);
        printf("SUM:    %d ",(OK_Count+Erro_Count));
        printf("----------------------------------- ");

实物图片:[/td][/tr]
[/table]
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
strong161
2019-03-24 02:40
这是在做医疗器械用的读数仪吧!CCD的读数仪是最差的,定量肯定不行,如果硬是要用于半定量,很多FDA都不批,不过每个地方有每个地方的要求,有的地方会松一些。CCD的识别受光环境影响太大了,最好是暗室,原则上可见光应该使用钨灯被光,LED光源本身就不是全波长的,波长分布也不均匀,就算用吧,也要多颗一起用。

一周热门 更多>