前言
在上一节中,我们学习了如何将总钻风摄像头的图像显示在1.8寸TFT显示屏上,其实我建议大家显示屏还是要选用ips200,像素点多一些,显示的图像更加清晰。
二值化处理
(1)对原始的灰度图像进行二值化,初学可以用固定阈值二值化来理解和学习,后面可以采用高级的动态阈值二值化(大津法),我们这篇文章介绍简单的固定阈值二值化。
(2)图像的像素值范围为0~255(黑色~白色),二值化的意思顾名思义是将整个图像的像素值转化为黑白两个值,即为0和255。
(3)下面的Set_image_towvalues(uint8 value)函数是固定阈值二值化的函数,value的范围是0~255,具体值要在赛道上经过调试后确定。
images.c
cpp
uint8 mt9v03x_image_BandW[MT9V03X_H][MT9V03X_W];
//图像二值化
//0 - 255
//黑 - 白
void Set_image_towvalues(uint8 value)
{
uint8 temp_valude;//暂存灰度值
for(uint8 i = 0;i < MT9V03X_H;i++)//高
{
for(uint8 j = 0;j < MT9V03X_W;j++)//宽
{
temp_valude = mt9v03x_image[i][j];
if(temp_valude < value)
{
mt9v03x_image_BandW[i][j] = 0;//黑
}
else
{
mt9v03x_image_BandW[i][j] = 255;//白
}
}
}
}
images.h
cpp
#ifndef CODE_IMAGES_H_
#define CODE_IMAGES_H_
extern uint8 mt9v03x_image_BandW[MT9V03X_H][MT9V03X_W];
void Set_image_towvalues(uint8 value);
#endif /* CODE_IMAGES_H_ */
cpu1_main.c
cpp
while (TRUE)
{
if(mt9v03x_finish_flag) //一幅图像完全采集完毕后,再进行图像的显示判断和显示
{
Set_image_towvalues(150); //固定阈值二值化
tft180_displayimage03x(mt9v03x_image_BandW[0],MT9V03X_W,MT9V03X_H);
mt9v03x_finish_flag = 0;//图像显示完成后才对标志位清零
}
}
经过固定二值化处理后的图像变成了黑白图像,为我们后面进一步的循迹功能做了铺垫,我们要对这个二值化后的数组进行扫线等处理。