金牌会员
- 积分
- 1416
- 威望
- 1049
- 贡献
- 297
- 兑换币
- 128
- 注册时间
- 2015-12-2
- 在线时间
- 35 小时
|
本帖最后由 wuwenfu5 于 2017-7-22 11:35 编辑
- __ramfunc uint8 zhifangtu_yuzhi(uint8 *ImageData_Hang)
- {
- static uint8 zhifang_yuzhi = 100;
-
- uint8 freq[13]={0};//255/20=12.75
- uint8 *freqp = freq;
-
- for (uint8 i = 0;i < 186;i ++) //统计一行数据的值 直方图
- (*(freqp+ImageData_Hang[i]/20)) ++;
-
-
- uint8 FreqDot_min = 6;
- uint8 White_Max_num = 0,Black_Max_num = 0;
-
- uint8 Freq_max = 0;
- uint8 count_temp = zhifang_yuzhi/20;
- for (uint8 i = 12;i > count_temp;i --)//使用上次预值做分界线
- {
- if ( *(freqp+i) > FreqDot_min)//至少大于 FreqDot_min 个点才有效
- {
- if ( *(freqp+i) > Freq_max)
- {
- Freq_max = *(freqp+i);
- White_Max_num = i;//找出 白色 峰值
- }
- }
- }
-
- count_temp = zhifang_yuzhi/20;
- Freq_max = 0;
- for (uint8 i = 0;i < count_temp;i ++)//使用上次预值做分界线
- {
- if ( *(freqp+i) > FreqDot_min)//至少大于 FreqDot_min 个点才有效
- {
- if ( *(freqp+i) > Freq_max)
- {
- Freq_max = *(freqp+i);
- Black_Max_num = i;//找出 黑色 峰值
- }
- }
- }
-
- // if (Distance_cm < 20)
- // {
- // Site_t site={0,16};
- // Size_t size={186,60}; //显示区域大小
- //
- // LCD_wave(site,size,ImageData_Hang,128,255,BLUE,WHITE); //波形显示,不带背景颜色
- // //freqp
- // site.x = 60;site.y =112;
- // LCD_num_BC (site,zhifang_yuzhi,3,GREEN,RED); //显示数字 Distance
- //
- //
- // Size_t zhixian_size = {128,1};
- // Site_t zhixian_site = {0,(int)(76.5 - zhifang_yuzhi * 60 /255.0)};
- // LCD_rectangle (zhixian_site, zhixian_size,GREEN); //画矩形
- // }
- zhifang_yuzhi = 10*(White_Max_num + Black_Max_num);
-
-
-
- return zhifang_yuzhi;
- }
复制代码
借贴开源。。。
仅提供一种思想,效果大家自己试试咯
大概是从上一次预值为分界线向左右找黑白峰值,如果不使用这个分界,直接定位黑白峰值的话我试过效果不够理想(水平有限,写不出来),大家可以参考改进一下。
|
|