金牌会员
- 积分
- 1580
- 威望
- 768
- 贡献
- 484
- 兑换币
- 491
- 注册时间
- 2014-9-13
- 在线时间
- 164 小时
|
5110显示CCD采集到的图像,图像显示黑线为白色,白色赛道为黑色。
我想设置为黑线为黑色,白色赛道不显示(或者为白的),不知道如何设置?
附山外二值化程序,不知道是不是改动山外二值化程序,可以显示,如果是,需要怎么改?
求大神指导
/*!
* @brief 简单的一个二值化 算法(不稳定,仅测试)
* @since v5.0
*/
// diff_threshold 差分阈值 ,不同的角度,不同的环境而有所不同
//可根据 maxdif 最大差分值来配置,或者直接固定阈值
#define diff_threshold ((maxdif> 12) ? ((maxdif*80)/100) :10) // 差分阈值
//#define diff_threshold 10
#define safe_isolation 3
void bin(uint8 *bin,uint8 * img,uint8 * difimg,uint16 len,uint8 maxdif)
{
uint16 tmplen = len;
uint8 thldnum = 0; //阈值次数
uint8 thresholdimg;
uint8 tmpnum;
memset(bin,0xFF,len); //全部当作
while(tmplen--)
{
if((tmplen == 0)|| (tmplen > len))
{
return;
}
if(difimg[tmplen] > diff_threshold) //找到 差分阈值
{
thldnum++;
//寻找最大差分阈值
while(tmplen--)
{
if((tmplen == 0)|| (tmplen > len))
{
return;
}
if(difimg[tmplen] < difimg[tmplen+1] ) //tmplen+1 为最大阈值
{
break;
}
}
//tmplen + 1 是 差分最大值 ,切换到 颜色扫描
if((img[tmplen] <= img[tmplen+1]) ||(img[tmplen+1] <= img[tmplen+2]) ) // 前面 黑色 ,后面 白色
{
//选择 差分值最大值的前一个 作为 阈值
thresholdimg = (img[tmplen+1] + img[tmplen+2])/2;
//扫描下一个 高于 此阈值 (比此点更白)
while(img[tmplen] <= thresholdimg)
{
bin[tmplen] = 0; //黑色
tmplen--;
if(tmplen == 0) //结尾了 ,直接退出
{
if(img[tmplen] <= thresholdimg)
{
bin[tmplen] = 0; //黑色
}
return ;
}
else if (tmplen > len)
{
return;
}
}
tmplen -= safe_isolation;
if((tmplen == 0)|| (tmplen > len))
{
return;
}
//等待差分值降低
while(difimg[tmplen] > diff_threshold)
{
tmplen--;
if((tmplen == 0)|| (tmplen > len))
{
return;
}
}
}
else
{
//前白 后 黑
if(thldnum == 1)
{
//后面的 内容都是 黑色的
tmpnum = tmplen + 1;
while(tmpnum < len)
{
bin[tmpnum] = 0; //黑色
tmpnum ++;
}
}
}
}
}
}
|
|