stm32驱动ov7670 数据转BMP格式再转JPEG存储 您所在的位置:网站首页 怎么变成bmp格式 stm32驱动ov7670 数据转BMP格式再转JPEG存储

stm32驱动ov7670 数据转BMP格式再转JPEG存储

2023-11-16 13:56| 来源: 网络整理| 查看: 265

一.搞了几天摄像头终于搞出来了一点成果,本打算用BMP格式保存读出的数据但是数据太大达到225k,后来又将BMP数据转成JPEG格式就小了很多,jpeg是有损压缩图片会变得不那么清晰。

搞出来的成果:

 

二.摄像头小知识:XCLK是输入摄像头的时钟,看别的原理图接的是一个12M的晶振,初始化的时候4倍频达到48M,这里没有接,用PA8输出8M内部6倍频达到48M,PCLK是摄像头输出的时钟达到12M,图像输出的是QVGA,RGB565格式,用的是VGA时序,一个像素需要2个pclk.

行输出时序图:

HREF是一个行信号,这个信号和mcu的一个引脚连接在SN74LVC1G00D(与非门)上,和mcu一块控制fifo,当准备写fifo时,mcu发送高电平,这时fifo并没有被使能,只有当HREF产生高电平信号时,在PCLK的配合下将数据写到fifo中。

帧输出时序图:

VSYNC是帧同步信号,当摄像头采集到一帧数据,会发出帧同步信号,用外部中断捕获这个帧中断信号。

void EXTI4_IRQHandler(void) {              if(EXTI_GetITStatus(EXTI_Line4)==SET)    //是4线的中断     {   if(OV7670_CS == 0)          {                        if(ov_sta == 0)                 {                                 OV7670_WRST=0;    //复位写指针                                        OV7670_WRST=1;                         OV7670_WREN=1;    //允许写入FIFO                           ov_sta=1;                 }                 else                 {                     OV7670_WRST=0;    //复位写指针                                        OV7670_WRST=0;                         OV7670_WREN=1;    //允许写入FIFO                  }             }     }     EXTI_ClearITPendingBit(EXTI_Line4);  //清除EXTI4线路挂起位                           }

三.读取数据并转换,也是仿照的别人的用的开源库。

void camera_refresh(void) {        int width, height;     int j,i;      u16 color=0;     int col;     int t;    jpeg_compress_info *cinfo;     pt_buf = 0;     if(ov_sta)//有帧中断更新?     {           width = 320;//图像的宽度            height = 240;//图像的高度            cinfo = jpeg_create_compress();           if (!cinfo)            {             //printf("error in create cinfo, malloc faild!\n");           }           cinfo->image_width = width;           cinfo->image_height= height;           cinfo->output =(char *)JPG_enc_buf;//fopen("test.jpg", "wb");           jpeg_set_default(cinfo);                        jpeg_start_compress(cinfo);            FLASH_SIZE1 = 8192;         OV7670_RRST=0;                //开始复位读指针                  OV7670_RCK_L;         OV7670_RCK_H;         OV7670_RCK_L;         OV7670_RRST=1;                //复位读指针结束          OV7670_RCK_H;                         for(j=0;j=0;i--)             {

      //高字节  数据位接的比较乱 根据实际情况修改                 OV7670_RCK_L;                 color = ((GPIOD->IDR&0xC000)>>14);   //D14 D15                 color |= ((GPIOD->IDR&0x0003)>3);  //E7 8 9 10                 OV7670_RCK_H;                                  color>14);   //D14 D15                 color |= ((GPIOD->IDR&0x0003)>3);  //E7 8 9 10                                 OV7670_RCK_H;                                                  R = (color>>8)&0xF8;                 G = (color>>3)&0xFC;                 B = (color          send_data(JPG_enc_buf[t]);//发送数据给上位机                   }               W25QXX_Write_NoCheck((u8*)JPG_enc_buf,FLASH_SIZE1,pt_buf);//写到flash

    }  }   

突然发现没加源码地址,补上:https://download.csdn.net/download/forwardjia/10633160



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有