OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2283|回复: 4

摄像头存储的问题,错位的问题

[复制链接]

5

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-6-27
在线时间
17 小时
发表于 2019-7-19 14:26:02 | 显示全部楼层 |阅读模式
1金钱
最近在搞摄像头的处理。用到的摄像头是0v7670的320*240像素,已经把图像灰度化了,想把灰度化放在数组里方便之后滤波处理。
因为存储器大小的问题,就想着降低像素。一开始想着降到150*150(44k)应该差不多了。
用的是F10zet6的芯片,外部有64K的RAM,但是没有成像,后来降到100*100也没有成像,【如下附上代码】
我这样子降分辨率 也还是没有用。后来降到60*60的时候成像了(60*60*2/1024=11.8K  难道要这么小才行吗!!!!!说好的64K呢!!!!)。但是当我调成61*61的时候LCD上的图像又错位了
如图



         IMG_20190719_142058.jpg IMG_20190719_142118.jpg


所以像这次发帖问一下大家,这个摄像头存储的问题,还有这个错位的问题

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"  
#include "string.h"
#include "ov7670.h"
#include "ov7725.h"
#include "tpad.h"
#include "timer.h"
#include "exti.h"
#include "usmart.h"
#include "IIC.h"

/************************************************
ALIENTEK精英STM32开发板实验33
摄像头OV7670 实验
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/
//传感器名字宏定义
#define  OV7725 1
#define  OV7670 2
//由于OV7725传感器安装方式原因,OV7725_WINDOW_WIDTH相当于LCD的高度,OV7725_WINDOW_HEIGHT相当于LCD的宽度
//注意:此宏定义只对OV7725有效
#define  OV7725_WINDOW_WIDTH  320 // <=320
#define  OV7725_WINDOW_HEIGHT  240 // <=240
#define xpoint 150
#define ypoint 150
const u32 totalcount=xpoint*ypoint;
extern u8 ov_sta; //在exit.c里 面定义
extern u8 ov_frame; //在timer.c里面定义

void OV7670_camera_refresh(void)
{
u32 j;
  u16 color;  
if(ov_sta)//有帧中断更新
{
  LCD_Scan_Dir(U2D_L2R);//从上到下,从左到右  
    if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window(0,0,xpoint,ypoint);//将显示区域设置到屏幕中央
  LCD_SetCursor(0x00,0x0000); //设置光标位置
  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<xpoint*ypoint;j++)
  {
   OV7670_RCK_L;
   color=GPIOC->IDR&0XFF; //读数据
   OV7670_RCK_H;
   color<<=8;  
   OV7670_RCK_L;
   color|=GPIOC->IDR&0XFF; //读数据
   OV7670_RCK_H;
   LCD->LCD_RAM=color;   
  }            
   ov_sta=0;     //清零帧中断标记
  ov_frame++;
  LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向
}
}
u8 RGBtogray(u16 changecolor)  //RGB565  转  灰度
{
u8 gray;
u16 r,g,b;
r=(changecolor&0xf100)>>11;
g=(changecolor&0x07e0)>>6;
b=changecolor&0x1f;
gray=(r*3/31+g*6/63+b*3/31)*25;
return gray;
}

int main(void)
{   
u8 sensor=0;
u8 key;
  u8 i=0;   
u16 hang,lie;
u8 a[totalcount];
u8 msgbuf[15];//消息缓存区
u8 lightmode=0,effect=0;
s8 saturation=0,brightness=0,contrast=0;
delay_init();       //延时函数初始化   
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200);   //串口初始化为 115200
  usmart_dev.init(72);  //初始化USMART  
  LED_Init();       //初始化与LED连接的硬件接口
KEY_Init();     //初始化按键
LCD_Init();        //初始化LCD   
OV7670_Init();
OV7670_Light_Mode(lightmode);
OV7670_Color_Saturation(saturation);
OV7670_Brightness(brightness);
OV7670_Contrast(contrast);
OV7670_Special_Effects(effect);
OV7670_Window_Set(12,174,ypoint,xpoint);//设置窗口  12   174 240  320
OV7670_CS=0;
TIM6_Int_Init(10000,7199);   //10Khz计数频率,1秒钟中断           
EXTI8_Init();      //使能外部中断8,捕获帧中断   
LCD_Clear(BLACK);
  while(1)
{
  OV7670_camera_refresh();
  for(hang=0;hang<xpoint;hang++)
    {
     for(lie=0;lie<ypoint;lie++)
      {
        a[hang+lie]=RGBtogray(LCD_ReadPoint(lie,hang));
        if(RGBtogray(LCD_ReadPoint(lie,hang))<50)
        {
          POINT_COLOR=BLACK;
          LCD_DrawPoint(lie,hang);
        }
        else
        {
           POINT_COLOR=WHITE;
          LCD_DrawPoint(lie,hang);
        }
      }
    }
}   
}








正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-7-20 02:09:36 | 显示全部楼层
单独要显示的话,我们都提供例程了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-6-27
在线时间
17 小时
 楼主| 发表于 2019-7-20 09:17:51 | 显示全部楼层
但我的问题是想把它存储起来去处理,不单单显示
回复

使用道具 举报

5

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-6-27
在线时间
17 小时
 楼主| 发表于 2019-7-20 09:19:22 | 显示全部楼层
这程序应该是卡在a[hang+lie]=RGBtogray(LCD_ReadPoint(lie,hang));这一句 下不去了吧
回复

使用道具 举报

5

主题

12

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2019-6-27
在线时间
17 小时
 楼主| 发表于 2019-7-20 09:20:37 | 显示全部楼层
把这一句话注释掉的话,还是能显示的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 05:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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