注册 登录
查看: 871|回复: 2

直道中线提取

[复制链接]
发表于 2017-9-19 21:41:40 | 显示全部楼层 |阅读模式
思路是检测两边的跳变沿,然后相加除以2。得到中线的坐标。但是实际用时中线有点短,而且明显是偏左的。除此之外,摄像头还有点卡顿。
代码:中线提取
#include"common.h"
#include"middle_line.h"
#include "VCAN_LCD.h"
extern uint8 imgbuff[4800];                            //定义存储接收图像的数组
extern uint8 img[60][80];
uint8 i,j,z;
uint8 left_back,right_back;
uint8 left_back_old,right_back_old;
uint8 left_flag,right_flag;
Site_t middle_point[30];
void find_middle()
{
for(i=30;i<60;i++)
{
  for(j=40;j>0;j--)
  {
    if(img[i][j]==0xff&&img[i][j-1]==0x00)
    {
     left_back=j;
     left_flag=1;
     left_back_old=left_back;
      break;
    }
    else left_flag=0;
  }
  for(j=40;j<80;j++)
  {
    if(img[i][j]==0xff&&img[i][j+1]==0x00)
    {
      right_back=j;
      right_back_old=right_back;
      right_flag=1;
      break;                                                                                                                                       
    }
    else right_flag=0;
  }
  if(right_flag==1&&left_flag==1)
   {
     middle_point[i-30].x=(right_back+left_back)/2;
   middle_point[i-30].y=i;
   }
  if(right_flag==1&&left_flag==0)
   {
    middle_point[i-30].x=(right_back+left_back_old)/2;
  middle_point[i-30].y=i;
   }
  if(right_flag==0&&left_flag==1)
   {
   middle_point[i-30].x=(right_back_old+left_back)/2;
middle_point[i-30].y=i;
   }
  if(right_flag==0&&left_flag==0)
   {
        middle_point[i-30].x=(right_back_old+left_back_old)/2;
        middle_point[i-30].y=i;
}
  }
}
void lcd_middle_line()
{
   LCD_points(middle_point,30,RED);
}


回复

使用道具 举报

发表于 2017-11-30 22:21:48 | 显示全部楼层
楼主Site_t middle_point[30];这个是一个结构体吗?内部是怎么定义的啊?
回复 支持 反对

使用道具 举报

发表于 2017-12-15 14:28:32 | 显示全部楼层
偏偏墨绿色 发表于 2017-11-30 22:21
楼主Site_t middle_point[30];这个是一个结构体吗?内部是怎么定义的啊?

一个 x  一个y
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部