经过几天的疑惑反复摸索,终于我摸索出来了。看来学东西的过程真的很重要,资料也很重要阿。
首先要说一下linux下ov9650初始化数据那里虽然写的是SXGA但实际应该读取的分辨率并不是1280*1024。而是320*240。有点太小了,接下来我会试试改改驱动。采出来是565模式的存储成bmp是要转化的。下面是我自己抓图代码,抓完之后转化成bmp图像。
int writebmp(unsigned short *bmp,int height,int width,char *filepath)
{
int i,j,size;
int fd;
struct tagBITMAPFILEHEADER bfhead;
struct tagBITMAPINFOHEADER binfohead;
size=height*width;
bfhead.bfSize=0x36+size*2;
bfhead.bfLeft=0;
bfhead.bfOffBits=0x36;
binfohead.biSize=0x28;
binfohead.bmpWidth=width;
binfohead.bmpHeight=height;
binfohead.biPlanes=1;
binfohead.bicolors=0x10;
binfohead.isCompressed=0;
binfohead.biMapSize=size*2;
binfohead.biHorizontal=0x0b13;
binfohead.biVertical=0x0b13;
binfohead.biusedcolors=0;
binfohead.biimportcolors=0;
fd=open(filepath,O_CREAT |O_RDWR);
write(fd,"BM",2);
i=write(fd,&bfhead,sizeof(struct tagBITMAPFILEHEADER));
printf("Write filehead %dbytes\n",i);
i=write(fd,&binfohead,sizeof(struct tagBITMAPINFOHEADER));
printf("Write infohead %dbytes\n",i);
i=write(fd,bmp,size*2);
printf("Write bitmap %dbytes\n",i);
lseek(fd,SEEK_SET,4);
close(fd);
return 1;
}
int main(int argc, char **argv)
{
int fd1,fd2;
unsigned short temp;
int nread,i,j,nwrite;
//int width,height;
unsigned long size1,size2;
unsigned char *y,*u,*v;
unsigned char r,g,b;
char file1name[]="/dev/camera";
unsigned short buff1[WIDTH*HEIGHT],buff2[400];
unsigned short bmp[WIDTH*HEIGHT];
size1=WIDTH*HEIGHT*2;/*如果认为是SXGA格式应该读的格式*/
fd1=open("/dev/camera",O_RDONLY);//|O_NONBLOCK
nread=read(fd1,buff1,size1);
/*这里由SXGA模式565转化为555*/
for(i=0;i<HEIGHT;i++)
for(j=0;j<WIDTH;j++)
{
*(bmp+i*WIDTH+j)=((buff1[i*WIDTH+j]&0xf800)>>1)|((buff1[i*WIDTH+j]&0x07c0)>>1)|((buff1[i*WIDTH+j]&0x1f));
//printf("%x\t",*(bmp+i*WIDTH+j));
}
i=HEIGHT,j=WIDTH;
writebmp(bmp, i, j,"bmp320sxgatest2");
}
自己做的图像头
struct tagBITMAPFILEHEADER{
unsigned long bfSize;
unsigned long bfLeft;
unsigned long bfOffBits;
};
/*bmp图像的位图信息头*/
struct tagBITMAPINFOHEADER{
unsigned long biSize;
unsigned long bmpWidth;
unsigned long bmpHeight;
unsigned short biPlanes;
unsigned short bicolors;
unsigned long isCompressed;
unsigned long biMapSize;
unsigned long biHorizontal;
unsigned long biVertical;
unsigned long biusedcolors;
unsigned long biimportcolors;
}; |