OV2640灰度处理和软件二值化

图像灰度化
1、分量法
2、最大值法
3、平均法
4、加权平衡法
计算灰度值流程
1、设置OV2640输出的数据为YUV422格式(16位数据的高字节为Y亮度值)
void OV2640_YUV422_Mode(void)\
{
	SCCB_WR_REG(0xff,0x00);//要设置0xDA寄存器,需要让0xFF=0x00;
	SCCB_WR_REG(0xda,0x01);//设置OV2640输出YUV422格式的数据
}
2、计算灰度值
u16 getcolor2(u16 tx,u16 ty)
{
	u16 i,tempcolor,R,G,B,avr;
	tempcolor=LCD_ReadPoint(tx,ty);//读取写入到TFTLCD上的点的颜色数据
	R=(int)((tempcolor>>11)*255.0/31.0+0.5);
	G=(int)((tempcolor>>5&0x3f)*255.0/63.0+0.5);
	B=(int)((tempcolor&0x1f)*255.0/31.0+0.5);
	avr=(R*19595+G*38469+B*7472)>>16;
	return avr;    //返回的数据为处理过的颜色数据(灰度值)
}
软件二值化
void search(void)
{
	ax=0;
	ay=0;
	for(tx=8;tx<162;tx+=3)
	{
		for(ty=10;ty<134;ty+=3)
		{
			avr=getcolor2(tx,ty);
			if(avr==255)
			{
				ax=tx/176.0*58;
				ay=ty/144.0*48;
			}
		}
	}
}
正点原子的灰度处理(分量法)
/*函数功能:YUV422格式转灰度图像;yuv422:yuv格式数据*/
u16 yuv422_to_gray(u16 yuyv422)
{
	u16 Gray;
	Gray=(((yuyv422>>(8+3))<<11)|((yuyv422>>(8+2))<<5)|((yuyv422>>(8+3))<<0));
	return Gray;
}
/*函数功能:YUV422格式Y量二值化(RGB565格式显示)*/
u16 yuv422_y_to_bitmap(u8 threshold,u16 yuv422)
{
	u16 bitmap;
	u8 temp;
	temp=(u8)(yuv422>>8);
	if(temp>=threshold)
				bitmap=0xffff;
			else
					bitmap=0x0000;
	return bitmap;
}

你可能感兴趣的:(STM32F4,传感器,模块)