找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2279|回复: 4
收起左侧

求助ov7670摄像头二值化怎么搞

[复制链接]
ID:245817 发表于 2017-11-3 20:30 | 显示全部楼层 |阅读模式
求助!!!!
回复

使用道具 举报

ID:269039 发表于 2018-1-1 13:31 | 显示全部楼层
void camera_refresh(void)
//{
//        u32 j;
//         u16 color;
//        u8 color_r,color_g,color_b;
//       
//        if(ov_sta)//有帧中断更新?
//        {
//                LCD_Scan_Dir(U2D_L2R);                //从上到下,从左到右  
//                if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//将显示区域设置到屏幕中央
//                else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//将显示区域设置到屏幕中央
//                LCD_WriteRAM_Prepare();     //开始写入GRAM       
//                OV7670_RRST=0;                                //开始复位读指针
//                OV7670_RCK_L;
//                OV7670_RCK_H;
//                OV7670_RCK_L;
//                OV7670_RRST=1;                                //复位读指针结束
//                OV7670_RCK_H;
//                for(j=0;j<76800;j++)
//                {
//                        OV7670_RCK_L;
//                        color=GPIOC->IDR&0XFF;        //读数据,低8位
//                        OV7670_RCK_H;
//                        color<<=8;  
//                        OV7670_RCK_L;
//                        color|=GPIOC->IDR&0XFF;        //读数据,高8位
//                        OV7670_RCK_H;
////                        LCD->LCD_RAM=color;
//                       
//                        color_b=(color>>0)&0x1f;
//            color_g=(color>>5)&0x3f;
//                color_r=(color>>11)&0x1f;
//                                               
//                       
////                        从 RGB 到 YUV 空间的 Y 转换公式为:
////              Y = 0.299R+0.587G+0.114B
////             color=(color_r*30+color_g*11+color_b*11+50)/100;
//
//            color=(color_r*38+color_g*75+color_b*15)>>7;         //二值化

//                       
//             if(color>16)          LCD->LCD_RAM=0xffff;
//              else                LCD->LCD_RAM=0x0000;

//                }                                                             
//                 ov_sta=0;                                        //清零帧中断标记
//                ov_frame++;
//                LCD_Scan_Dir(DFT_SCAN_DIR);        //恢复默认扫描方向
//        }
//}          
回复

使用道具 举报

ID:269039 发表于 2018-1-1 13:31 | 显示全部楼层
回复

使用道具 举报

ID:269039 发表于 2018-1-1 13:30 | 显示全部楼层
void camera_refresh(void)
{
        u32 j;
        u16 color;
        u8 color_r,color_g,color_b;
       
        if(ov_sta)//有帧中断更新?
        {
                LCD_Scan_Dir(U2D_L2R);                //从上到下,从左到右  
                if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//将显示区域设置到屏幕中央
                else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//将显示区域设置到屏幕中央
                LCD_WriteRAM_Prepare();     //开始写入GRAM       
                OV7670_RRST=0;                                //开始复位读指针
                OV7670_RCK_L;
                OV7670_RCK_H;
                OV7670_RCK_L;
                OV7670_RRST=1;                                //复位读指针结束
                OV7670_RCK_H;
                for(j=0;j<76800;j++)
                {
                        OV7670_RCK_L;
                        color=GPIOC->IDR&0XFF;        //读数据,低8位
                        OV7670_RCK_H;
                        color<<=8;  
                        OV7670_RCK_L;
                        color|=GPIOC->IDR&0XFF;        //读数据,高8位
                        OV7670_RCK_H;
//                        LCD->LCD_RAM=color;
                       
                        color_b=(color>>0)&0x1f;
            color_g=(color>>5)&0x3f;
                color_r=(color>>11)&0x1f;
                                               
                       
//                        从 RGB 到 YUV 空间的 Y 转换公式为:
//              Y = 0.299R+0.587G+0.114B
//             color=(color_r*30+color_g*11+color_b*11+50)/100;

            color=(color_r*38+color_g*75+color_b*15)>>7;         //二值化

                       
             if(color>16)          LCD->LCD_RAM=0xffff;
              else                LCD->LCD_RAM=0x0000;

                }                                                             
                ov_sta=0;                                        //清零帧中断标记
                ov_frame++;
                LCD_Scan_Dir(DFT_SCAN_DIR);        //恢复默认扫描方向
        }
}          
回复

使用道具 举报

ID:269039 发表于 2018-1-1 13:29 | 显示全部楼层
将RGB格式 转换为YUV格式的中的Y值 通过设置Y值中的 阈值来进行二值化
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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