📄 草稿.cpp
字号:
//得到每一行黑线的动态阙值
int get_value (int img[row][column],int row)
{
int i;
int max=-1,min=1000;
int mid;
int dt=0.39; //动态阙值系数,貌似得做成全局变量
for (i=0;i<=column-1;column++)
{
if (img[row][i]<min) //找出该行的最小值
min=img[row][i];
if (img[row][i]>max) //找出该行的最大值
max=img[row][i];
}
mid=(min+max)*dt; //得到该行的阙值
return mid;
}
//此处用的边沿判别法,不过也可以换成是求中间最黑点
int get_everyrow_blackline_position (int img[row][column],int row,int value)
{
int i;
int trailing_edge=0,rising_edge=0;
int low_point,high_point;
int position;
i=0;
while (i<=column-1)
{
if (img[row][i]-img[row][i+2]>value&&trailing_edge==0) //满足下降沿条件
{
trailing_edge=1;
low_point=i; //记录下降沿位置
}
if (img[row][i+2]-img[row][i]>value&&trailing_edge==1) //满足上升沿条件
rising_edge=1;
if (img[row][i+2]-img[row][i]<value&&trailing_edge==1&&rising_edge==1) //之后的数据满足平整条件
high_point=i; //记录上升沿位置
else
i++;
}
position=(low_point+high_point)/2; //求得黑线的相对位置,此处也可换成求最黑点
return position;
}
/*void clear_noise (int img[row][column])
{
int i;
int black_line_position[row];
int value;
for (i=0;i<row-1;i++)
{
value=get_value(img,row);
black_line_position[i]=get_black_line_position (img,row,value); //把所有行黑线所在的确切位置放在一个数组中
}
for (i=row-1;i>=0;i--)
if (black_line_position[i]-black_line_position[i-1]<value) //判断上下两行黑线的位置是否连续
*/
//得到黑线数组
//把black_line_position[]作为全局变量
void get_black_line_array (int img[][])
{
int row_i,col_j;
int black_line_position[row];
int value;
for (row_i=ROW-1;row_i>=0;row_i--)
{
value=get_value(img,row_i);
black_line_position[row_i]=get_everyrow_blackline_position (img[row][column],row_i,value);
}
}
//这儿有问题,因为value每一行都不同,这种比较久会显得很无力
void clear_noise(void)
{
int i;
for (i=0;i<row-1;i++)
{
value=get_value(img,row_i);
if (black_line_position[i+1]-black_line_position[i]>value) //表示不是连续段
//改进方案:记下断点位置,以及用计数器累加,记下不连续段的长度
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -