我在使用STM32系统,OV2640摄像头,进行物体拍照的时候,可以通过RGB565模式,成功投射到LCD上,但是存储下来就变了样了。
拍摄时使用的BMP格式。
在LCD屏幕上显示如下图
拍出来的存储效果,却如下图
看的出来,鼻子眼睛位置还在,就是走样了。当然拍摄的物体model原本是这个样子的
。
不知道有没有哪位朋友遇到过类似问题?
拍照部分代码(基本抄的正点原子的)
if(Time_counter==1000) //自己做的个计时,大约10s, 没有做按键
{
Time_counter=0;
if(key==WKUP_PRES) //写死了不会进这里
{
scale=!scale;
if(scale==0)
{
OV2640_ImageWin_Set((1600-lcddev.width)/2,(1200-lcddev.height)/2,lcddev.width,lcddev.height);//1:1真实尺寸
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Full Size 1:1");
}else
{
OV2640_ImageWin_Set(0,0,1600,1200); //全尺寸缩放
OV2640_OutSize_Set(lcddev.width,lcddev.height);
sprintf((char*)msgbuf,"Scale");
}
LCD_ShowString(30,50,210,16,16,msgbuf);//显示提示内容
printf("%s\r\n",msgbuf);
delay_ms(800);
}else if(sd_ok)//SD卡正常才可以拍照
{
sw_sdcard_mode(); //切换为SD卡模式
if(key==KEY0_PRES) //BMP拍照 //写死了进行BMP拍照
{
camera_new_pathname(pname,0);//得到文件名
res=bmp_encode(pname,0,0,lcddev.width,lcddev.height,0);
}else if(key==KEY1_PRES)//JPG拍照
{
camera_new_pathname(pname,1);//得到文件名
res=ov2640_jpg_photo(pname);
if(scale==0)
{
OV2640_ImageWin_Set((1600-lcddev.width)/2,(1200-lcddev.height)/2,lcddev.width,lcddev.height);//1:1真实尺寸
OV2640_OutSize_Set(lcddev.width,lcddev.height);
}else
{
OV2640_ImageWin_Set(0,0,1600,1200); //全尺寸缩放
}
OV2640_OutSize_Set(lcddev.width,lcddev.height);
}
sw_ov2640_mode(); //切换为OV2640模式
if(res)//拍照有误
{
Show_Str(30,130,240,16,"写入文件错误!",16,0);
printf("写入文件错误!\r\n");
}else
{
Show_Str(30,130,240,16,"拍照成功!",16,0);
Show_Str(30,150,240,16,"保存为:",16,0);
Show_Str(30+42,150,240,16,pname,16,0);
printf("拍照成功!\r\n");
printf("保存为:");
printf("%s\r\n",pname);
//BEEP=1; //蜂鸣器短叫,提示拍照完成
delay_ms(100);
}
}else //提示SD卡错误
{
// Show_Str(30,430,240,16,"SD卡错误!",16,0);
// Show_Str(30,450,240,16,"拍照功能不可用!",16,0);
printf("%03d SD卡错误!\r\n",sd_ok);
printf("拍照功能不可用!\r\n");
}
//BEEP=0; //关闭蜂鸣器
if(key!=WKUP_PRES)delay_ms(1800);//非尺寸切换,等待1.8秒钟
DCMI_Start(); //停止显示
//Camera 拍照
}
设置部分代码
DCMI_InitStructure.DCMI_CaptureMode=DCMI_CaptureMode_Continuous;//连续模式
DCMI_InitStructure.DCMI_CaptureRate=DCMI_CaptureRate_All_Frame;//全帧捕获
//DCMI_InitStructure.DCMI_CaptureRate=DCMI_CaptureRate_1of4_Frame;//1/4捕获
DCMI_InitStructure.DCMI_ExtendedDataMode= DCMI_ExtendedDataMode_8b;//8位数据格式
DCMI_InitStructure.DCMI_HSPolarity= DCMI_HSPolarity_Low;//HSYNC 低电平有效
DCMI_InitStructure.DCMI_PCKPolarity= DCMI_PCKPolarity_Rising;//PCLK 上升沿有效
DCMI_InitStructure.DCMI_SynchroMode= DCMI_SynchroMode_Hardware;//硬件同步HSYNC,VSYNC
DCMI_InitStructure.DCMI_VSPolarity=DCMI_VSPolarity_Low;//VSYNC 低电平有效
DCMI_Init(&DCMI_InitStructure);
DCMI_ITConfig(DCMI_IT_FRAME,ENABLE);//开启帧中断
DCMI_Cmd(ENABLE); //DCMI使能
NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、