全功能智能车之CCD增加自适应光照能力(第十三篇)
2015-11-28 21:23
309 查看
全功能智能车之CCD增加自适应光照能力
其实就是增加了如下函数:
/*************************************************************************
* 函数名称:VerifyExposure
* 功能说明:曝光检验 自动选取最合适的曝光值
* 参数说明:
* 函数返回:无
* 修改时间:2015-11-28
× 作者:piaoran QQ:384710930
* 备 注:VerifyExposure();
*************************************************************************/
void VerifyExposure(void) {
u8 i,j,cnt_max,cnt_min;
s16 temp;
for(j=0;j<200;j++){ //最多调节100次
ImageCapture(Pixel); //获取图像
ccd_avg=PixelAverage(CCD_LENGTH,Pixel);
ccd_max=ccd_avg;
ccd_min=ccd_avg;
temp=exposureTime;
for(i=0;i<CCD_LENGTH;i++){
if(Pixel[i]>=(ccd_max-25)){
cnt_max++;
cnt_min=0;
if(cnt_max>=3) ccd_max=Pixel[i];
continue;
}
if(Pixel[i]<=(ccd_min+25)){
cnt_min++;
cnt_max=0;
if(ccd_min>=3) ccd_min=Pixel[i];
continue;
}
}
if(ccd_max<=2400) { //曝光不够
temp +=3;
if(temp>1000) temp=1000;
}
if(ccd_min>=1600) { //曝光过高
temp -=5;
if(temp<1) temp=1;
}
exposureTime=temp;
SendImageData(Pixel);
LCD_ShowxNum(20+8*8,70,ccd_max,4,16,0);//液晶显示
LCD_ShowxNum(20+22*8,70,ccd_min,4,16,0);
LCD_ShowxNum(20+8*8,90,exposureTime,4,16,0);
LCD_ShowxNum(20+22*8,90,ccd_avg,4,16,0);
delay_ms(50);
}
}
当然也完善了相应的功能,如取消了一个大数组,在发送函数做如下修改:
/*************************************************************************
* 函数名称:SendImageData
* 功能说明:
* 参数说明:
* 函数返回:无
* 修改时间:2015-11-28
× 作者:piaoran QQ:384710930
* 备 注:SendImageData(Pixel);
*************************************************************************/
void SendImageData(unsigned short * ImageData) {
unsigned char i,temp;
//0x00代表最暗,0xfe代表最亮 而采集回来的是12位的ADC值
for(i=0; i<CCD_LENGTH; i++) {
temp=(u8)(*ImageData>>4);
if(temp==0xff) temp=0xfe;
uart_putchar(USART1,temp);
ImageData++;
}
uart_putchar(USART1,0xff);
}
下面是实验图片:
可以卡到ccd_max和exposureTime都在上升,这就是自动调节曝光度的作用
下面是源代码:
http://download.csdn.net/detail/chengdong1314/9308725
其实就是增加了如下函数:
/*************************************************************************
* 函数名称:VerifyExposure
* 功能说明:曝光检验 自动选取最合适的曝光值
* 参数说明:
* 函数返回:无
* 修改时间:2015-11-28
× 作者:piaoran QQ:384710930
* 备 注:VerifyExposure();
*************************************************************************/
void VerifyExposure(void) {
u8 i,j,cnt_max,cnt_min;
s16 temp;
for(j=0;j<200;j++){ //最多调节100次
ImageCapture(Pixel); //获取图像
ccd_avg=PixelAverage(CCD_LENGTH,Pixel);
ccd_max=ccd_avg;
ccd_min=ccd_avg;
temp=exposureTime;
for(i=0;i<CCD_LENGTH;i++){
if(Pixel[i]>=(ccd_max-25)){
cnt_max++;
cnt_min=0;
if(cnt_max>=3) ccd_max=Pixel[i];
continue;
}
if(Pixel[i]<=(ccd_min+25)){
cnt_min++;
cnt_max=0;
if(ccd_min>=3) ccd_min=Pixel[i];
continue;
}
}
if(ccd_max<=2400) { //曝光不够
temp +=3;
if(temp>1000) temp=1000;
}
if(ccd_min>=1600) { //曝光过高
temp -=5;
if(temp<1) temp=1;
}
exposureTime=temp;
SendImageData(Pixel);
LCD_ShowxNum(20+8*8,70,ccd_max,4,16,0);//液晶显示
LCD_ShowxNum(20+22*8,70,ccd_min,4,16,0);
LCD_ShowxNum(20+8*8,90,exposureTime,4,16,0);
LCD_ShowxNum(20+22*8,90,ccd_avg,4,16,0);
delay_ms(50);
}
}
当然也完善了相应的功能,如取消了一个大数组,在发送函数做如下修改:
/*************************************************************************
* 函数名称:SendImageData
* 功能说明:
* 参数说明:
* 函数返回:无
* 修改时间:2015-11-28
× 作者:piaoran QQ:384710930
* 备 注:SendImageData(Pixel);
*************************************************************************/
void SendImageData(unsigned short * ImageData) {
unsigned char i,temp;
//0x00代表最暗,0xfe代表最亮 而采集回来的是12位的ADC值
for(i=0; i<CCD_LENGTH; i++) {
temp=(u8)(*ImageData>>4);
if(temp==0xff) temp=0xfe;
uart_putchar(USART1,temp);
ImageData++;
}
uart_putchar(USART1,0xff);
}
下面是实验图片:
可以卡到ccd_max和exposureTime都在上升,这就是自动调节曝光度的作用
下面是源代码:
http://download.csdn.net/detail/chengdong1314/9308725
相关文章推荐
- 程序猿进化必读:让App的运行速度与响应速度趋于一流(iOS)
- 关于文本编辑器的推荐
- Java、Hibernate(JPA)注解大全
- 网页设计大赛第十天
- 从今天开始学习ios,入门第二天(Object-C学习笔记)内存管理
- 音乐播放器
- nyoj--116--士兵杀敌(二)(树状数组)
- STM32F103ZET6 之 通用定时器单脉冲模式实验
- 高德地图初步使用-显示
- nyoj--116--士兵杀敌(二)(树状数组)
- Windows Live Writer 使用指南
- ssh 公钥认证配置
- 新的时代新的教育
- 杭电oj 1007
- 项目管理过程组与知识领域
- HDU 2617 Happy 2009
- POJ 3169 Layout
- 【HDU5579 2015上海赛区G】【超级大讨论】Game of Arrays a[]+b[]+c[]有些位置可以减一,状态是否可能达成
- 雷霄骅(leixiaohua1020)的专栏
- 什么是宽容?什么是善恶?