|
关于STM32F103+OV7670(带FIFO)采集单位区域内颜色块数据错误的问题,求各位大佬...
[复制链接]
[tr][td]最近用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
{
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]); //采集参考图像标准像素点用,后面做图像对比时就屏蔽该语句
}
}
}
//****************************************************************************************************
// 采集图像像素点数据与参考图像像素点数据对比程序:
//****************************************************************************************************
void Data_Check()
{
u32 m;
for(m=0;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");
实物图片:[/td][/tr]
[/table]
|
|