初级会员

- 积分
- 88
- 金钱
- 88
- 注册时间
- 2019-3-29
- 在线时间
- 27 小时
|
27金钱
stm32f429阿波罗,ov2640,采用rgb565模式
二值化程序放在帧中断里面,处理慢,放在主函数里面,缩小显示尺寸也是慢。
请教大佬指导,二值化程序放在哪里
程序源码链接:https://pan.baidu.com/s/1W4lUIVmKIhfRJ7ggLRb2cg 提取码:adrn
视频在附件里,悬赏新手全部积分,以表诚意
/*
函数:灰度化且二值化函数
形参:采集的像素点数据
返回值类型:u16
返回值:二值化后的值
*/
u16 Binary(void)
{
u16 x,y,pixel;
static u16 Gray;
DCMI_Stop();
for(x=0;x<400;x++)
{
for(y=0;y<400;y++)
{
pixel=LCD_ReadPoint(x,y);
R=(pixel&RGB_R)>>11;//提取R,G,B值
G=(pixel&RGB_G)>>5;
B=(pixel&RGB_B);
Gray=(u16)((R*634+G*613+B*232));//灰度值计算12位
if(Gray<threshold)
LCD_Fill(x,y,x,y,BLACK);
else if(Gray>=threshold)
LCD_Fill(x,y,x,y,WHITE);
}
}
LCD_SetCursor(0,0);
LCD_WriteRAM_Prepare(); //开始写入GRAM
DCMI_Start();
}
主函数while循环
while(1)
{
key=KEY_Scan(0);//不支持连按
if((key)&&(key!=KEY2_PRES))
{
if(key==WKUP_PRES)//缩放处理
{
scale=!scale;
if(scale==0)
{
OV2640_ImageWin_Set((1600-lcddev.width)/2,(1200-outputheight)/2,lcddev.width,outputheight);//1:1真实尺寸
//sprintf((char*)msgbuf,"Full Size 1:1");
}
else
{
OV2640_ImageWin_Set(0,0,1600,1200);//全尺寸缩放
//sprintf((char*)msgbuf,"Scale");
}
OV2640_OutSize_Set(lcddev.width,outputheight);
}
DCMI_Start();//开始显示
}
Binary();
}
|
最佳答案
查看完整内容[请看2#楼]
建议数据处理完,先缓存到内部SRAM,然后再一次性写入LCD,这样会快很多。你的LCD_Fill函数,很耗时间的。
|