⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 草稿.cpp

📁 黑线提取算法
💻 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 + -