stm32f407使用ov2640色块识别


前言

ov2640色块识别,提取RGB格式图像的R,G,B,调节阈值,将图像进行二值化传输到LCD上。(注:免费源码链接,请点赞关注私信)

一、提取R,G,B。

	 	red   =	 (uint16_t)((RGB&0xf800)>>8);   //提取像素的R ,G ,B
       	green =	 (uint16_t)((RGB&0x07e0)>>3);
        blue  =  (uint16_t)((RGB&0x001f)<<3);

二、色块识别。

1: 通过调节R,G,B的大小范围来捕获所要识别的颜色,

uint8_t r=100,g=0,b=0;
uint8_t r1=190,g1=100,b1=100;
void rgb_data_process(void)      
{
    uint16_t sum_x =0,sum_y =0, i_xy =0; 
    uint16_t X=0,Y=0,n_i=0;        
    uint8_t key=0,key1=0;
   
    key1=remote_scan();   //红外遥控按键
    
    if(g_ov )             //一帧图像标志
    {		
        dcmi_stop();                     //停止数据传输
        lcd_set_cursor(0,0);             //开始写入LCD坐标
        lcd_write_ram_prepare();         //开始写入
       
        for(find_y=0;find_y<B;find_y++)  //显示色块二值化图像
        {
            for(find_x=0;find_x<A;find_x++)
            {
                if(find_x==(A-1))
                {                     
                    lcd_set_cursor(0,find_y+1);  
                    lcd_write_ram_prepare();    
                }
                red   =	 (uint16_t)((rgb_buf[find_y][find_x]&0xf800)>>8);           //提取像素的RED ,GREEN ,BLUE
                green =	 (uint16_t)((rgb_buf[find_y][find_x]&0x07e0)>>3);
                blue  =  (uint16_t)((rgb_buf[find_y][find_x]&0x001f)<<3);
                
                if((red>r && red<r1 && green>g && green<g1 && blue> b && blue< b1) ) //调节阈值,识别色块
                {
                    
                    sum_x = sum_x+find_x ;
                    sum_y = sum_y+find_y ;
                    i_xy++;
                                  
                    LCD->LCD_RAM=BLACK;
                }
                else
                {
                    LCD->LCD_RAM=WHITE;
                }
            }
        }
                       //计算色块的中心点  
        n_i=i_xy;
        X=sum_x /n_i;		
        Y=sum_y /n_i;
        lcd_show_num(200,210,X,3,16,RED);//显示中心点坐标
        lcd_show_num(200,230,Y,3,16,RED);
                       
        for(find_y=0;find_y<B;find_y++)   //显示摄像的图像
        {
            for(find_x=0;find_x<A;find_x++)
            {
                if(find_x==(A-1))
                {                     
                    lcd_set_cursor(0,100+find_y+1);  
                    lcd_write_ram_prepare();     //开始写入GRAM
                }
                LCD->LCD_RAM=rgb_buf[find_y][find_x];       
            }
        }
        g_ov=0;         //清零一帧图像标志
        dcmi_start();   //启动摄像数据传输
        __HAL_DCMI_ENABLE_IT(&g_dcmi_handle, DCMI_IT_FRAME);  //使能帧中端      

    }  
           
    key= key_scan(1);
    if(key==1)r++;
    if(key==2)r1++;
//    if(key==3)b++;
//    if(key==4)g1++;

//            if(key1==12)r++;
//            if(key1== 24)r1++;

//            if(key1== 8)g++;
//            if(key1== 28)g1++;

//            if(key1== 66)b++;
//            if(key1== 82)b1++;
//    
    lcd_show_string(30, 220, 200, 16, 16, "R:", RED);
    lcd_show_string(30, 240, 200, 16, 16, "G:", RED);
    lcd_show_string(30, 260, 200, 16, 16, "B:", RED);

    lcd_show_string(120, 220, 200, 16, 16, "R1:", RED);
    lcd_show_string(120, 240, 200, 16, 16, "G1:", RED);
    lcd_show_string(120, 260, 200, 16, 16, "B1:", RED);
   
    lcd_show_num(50,220,r,3,16,RED);
    lcd_show_num(50,240,g,3,16,RED);
    lcd_show_num(50,260,b,3,16,RED);

    lcd_show_num(140,220,r1,3,16,RED);
    lcd_show_num(140,240,g1,3,16,RED);
    lcd_show_num(140,260,b1,3,16,RED);
        
                           
}

2:效果演示

在这里插入图片描述

总结

以上就是今天要讲的内容RGB格式的色块识别,网络上大都是推荐HSL / HSV格式的想了解区别的话自己可以搜一下,RGB的话方便点不用转换格式。后期还会分享单片机相关的学习,感兴趣的话可以支持一下,关注一下博主,让咱们一块成长。想要下载源码的小伙伴点击这里stm32f407+ov2640色块识别

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜·き

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值