前言
主控芯片为stm32f407首先,要有一个ov2640的例程代码,我用的是正点原子的例程。将图像二值化处理要将RGB格式的图像先灰度化然后在调节阈值让图像黑白化也就是二值化,最后将图像传给LCD液晶屏就可以了。
一、ov2640的例程
该例程可以从正点原子那获得。
(注:免费源码链接,请点赞关注私信)
二、灰度
灰度化公式我就不在讲了,这个在网上都能查得到还都挺多的。
三、创建数组存储图像数据
uint16_t rgb_buf[200][200]; /* 存储摄像头采集的数据 */
dcmi_dma_init((uint32_t)&rgb_buf, 0, sizeof(rgb_buf)/4, DMA_MDATAALIGN_HALFWORD, DMA_MINC_ENABLE); /* DCMI DMA配置,图像数据传入数组中 */
四、LCD液晶屏显示(主要函数部分)
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/KEY/key.h"
#include "./BSP/OV2640/ov2640.h"
#include "./BSP/OV2640/sccb.h"
#include "./BSP/DCMI/dcmi.h"
uint8_t g_ov_mode = 0; /* bit0: 0, RGB565模式; 1, JPEG模式 */
uint8_t A=200,B=200; //摄像显示尺寸大小
uint16_t rgb_buf[200][200]; /* 存储摄像头采集的数据 */
uint8_t threshold=10; /* 阈值变量 */
int main(void)
{
uint16_t i=0, j=0,key=0;
uint16_t gray=0;
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
delay_init(168); /* 延时初始化 */
led_init(); /* 初始化LED */
lcd_init();
key_init(); /* 初始化LCD */ key_init(); /* 初始化按键 */
while (ov2640_init()) /* 初始化OV2640 */
{
}
lcd_clear(WHITE); /* 清屏 */
ov2640_outsize_set(A, B); /* 满屏缩放显示 */
ov2640_rgb565_mode(); /* RGB565模式 */
dcmi_init(); /* DCMI配置 */
dcmi_dma_init((uint32_t)&rgb_buf, 0, sizeof(rgb_buf)/4, DMA_MDATAALIGN_HALFWORD, DMA_MINC_ENABLE); /* DCMI DMA配置,MCU屏,竖屏 */
dcmi_start(); /* 启动传输 */
while(1)
{
lcd_set_cursor(0,0);
lcd_write_ram_prepare();
for(i=0;i<B;i++)
{
for(j=0;j<A;j++)
{
if(j==(A-1))
{
lcd_set_cursor(0,i+1); //换行写入LCD
lcd_write_ram_prepare(); //开始写入GRAM
}
gray=((rgb_buf[i][j]>>11)*19595+((rgb_buf[i][j]>>5)&0x3f)*38469 +(rgb_buf[i][j]&0x1f)*7472)>>16;//灰度化公式根据需求可以更改
if(gray>=threshold) //调节阈值图像黑白二值化
{
LCD->LCD_RAM=WHITE;
}
else
{
LCD->LCD_RAM=BLACK;
}
}
}
key=key_scan(0); //按键扫描函数
if(key)
{
switch(key)
{
case 1:threshold++;break; //阀值+1
case 2: threshold--;break; //阀值-1
}
lcd_show_num(0,250,threshold,8,16,RED);
}
}
}
效果显示演示图
总结
以上就是今天要讲的内容,本文仅仅简单介绍了图像二值化,后期还会分享相关内容学习,想要了解的小伙伴可以关注一下博主。还有不懂的同学可以下载源码看看stm32f407+ov2640图像二值化。