ov2640摄像头如何缩放图像,让屏幕显示的范围更大呢?

2019-07-20 07:28发布

我用的是正点原子里摄像头实验的代码,但我在网上查了好多资料,都调不出来,我想让摄像头的视场更大一点,不知道大家有没有办法。
代码如下:
//éèÖÃí¼Ïñêä3ö′°¿ú
//sx,sy,Æeê¼μØÖ·
//width,height:¿í¶è(¶Ôó|:horizontal)oí¸ß¶è(¶Ôó|:vertical)
void OV2640_Window_Set(u16 sx,u16 sy,u16 width,u16 height)
{
        u16 endx;
        u16 endy;
        u8 temp;
        sx=sy=0;
        endx=sx+width/2;        //V*2
        endy=sy+height/2;
       
        SCCB_WR_Reg(0XFF,0X01);                       
        temp=SCCB_RD_Reg(0X03);                                //¶áè¡Vref֮ǰμÄÖμ
        temp&=0XF0;
        temp|=((endy&0X03)<<2)|(sy&0X03);
        SCCB_WR_Reg(0X03,temp);                                //éè&#214;&#195;Vrefμ&#196;startoíendμ&#196;×&#238;μí2&#206;&#187;
        SCCB_WR_Reg(0X19,sy>>2);                        //éè&#214;&#195;Vrefμ&#196;start&#184;&#223;8&#206;&#187;
        SCCB_WR_Reg(0X1A,endy>>2);                        //éè&#214;&#195;Vrefμ&#196;endμ&#196;&#184;&#223;8&#206;&#187;
       
        temp=SCCB_RD_Reg(0X32);                                //&#182;áè&#161;Href&#214;&#174;&#199;°μ&#196;&#214;μ
        temp&=0XC0;
        temp|=((endx&0X07)<<3)|(sx&0X07);
        SCCB_WR_Reg(0X32,temp);                                //éè&#214;&#195;Hrefμ&#196;startoíendμ&#196;×&#238;μí3&#206;&#187;
        SCCB_WR_Reg(0X17,sx>>3);                        //éè&#214;&#195;Hrefμ&#196;start&#184;&#223;8&#206;&#187;
        SCCB_WR_Reg(0X18,endx>>3);                        //éè&#214;&#195;Hrefμ&#196;endμ&#196;&#184;&#223;8&#206;&#187;
}
//éè&#214;&#195;í&#188;&#207;&#241;ê&#228;3&#246;′óD&#161;
//OV2640ê&#228;3&#246;í&#188;&#207;&#241;μ&#196;′óD&#161;(·&#214;±&#230;&#194;ê),íêè&#171;óé&#184;&#196;oˉêyè·&#182;¨
//width,height:&#191;í&#182;è(&#182;&#212;ó|:horizontal)oí&#184;&#223;&#182;è(&#182;&#212;ó|:vertical),widthoíheight±&#216;D&#235;ê&#199;4μ&#196;±&#182;êy
//·μ&#187;&#216;&#214;μ:0,éè&#214;&#195;3é1|
//    &#198;&#228;&#203;&#251;,éè&#214;&#195;꧰ü
u8 OV2640_OutSize_Set(u16 width,u16 height)
{
        u16 outh;
        u16 outw;
        u8 temp;
        if(width%4)return 1;
        if(height%4)return 2;
        outw=width/4;
        outh=height/4;
        SCCB_WR_Reg(0XFF,0X00);       
        SCCB_WR_Reg(0XE0,0X04);                       
        SCCB_WR_Reg(0X5A,outw&0XFF);                //éè&#214;&#195;OUTWμ&#196;μí°&#203;&#206;&#187;
        SCCB_WR_Reg(0X5B,outh&0XFF);                //éè&#214;&#195;OUTHμ&#196;μí°&#203;&#206;&#187;
        temp=(outw>>8)&0X03;
        temp|=(outh>>6)&0X04;
        SCCB_WR_Reg(0X5C,temp);                                //éè&#214;&#195;OUTH/OUTWμ&#196;&#184;&#223;&#206;&#187;
        SCCB_WR_Reg(0XE0,0X00);       
        return 0;
}
//éè&#214;&#195;í&#188;&#207;&#241;&#191;a′°′óD&#161;
//óé:OV2640_ImageSize_Setè·&#182;¨′&#171;&#184;D&#198;÷ê&#228;3&#246;·&#214;±&#230;&#194;ê′ó′óD&#161;.
//&#184;&#195;oˉêy&#212;ò&#212;ú&#213;a&#184;&#246;·&#182;&#206;§é&#207;&#195;&#230;&#189;&#248;DD&#191;a′°,ó&#195;óúOV2640_OutSize_Setμ&#196;ê&#228;3&#246;
//×¢òa:±&#190;oˉêyμ&#196;&#191;í&#182;èoí&#184;&#223;&#182;è,±&#216;D&#235;′óóúμèóúOV2640_OutSize_Setoˉêyμ&#196;&#191;í&#182;èoí&#184;&#223;&#182;è
//     OV2640_OutSize_Setéè&#214;&#195;μ&#196;&#191;í&#182;èoí&#184;&#223;&#182;è,&#184;ù&#190;Y±&#190;oˉêyéè&#214;&#195;μ&#196;&#191;í&#182;èoí&#184;&#223;&#182;è,óéDSP
//     ×&#212;&#182;ˉ&#188;&#198;&#203;&#227;&#203;&#245;·&#197;±èày,ê&#228;3&#246;&#184;&#248;ía2&#191;éè±&#184;.
//width,height:&#191;í&#182;è(&#182;&#212;ó|:horizontal)oí&#184;&#223;&#182;è(&#182;&#212;ó|:vertical),widthoíheight±&#216;D&#235;ê&#199;4μ&#196;±&#182;êy
//·μ&#187;&#216;&#214;μ:0,éè&#214;&#195;3é1|
//    &#198;&#228;&#203;&#251;,éè&#214;&#195;꧰ü
u8 OV2640_ImageWin_Set(u16 offx,u16 offy,u16 width,u16 height)
{
        u16 hsize;
        u16 vsize;
        u8 temp;
        if(width%4)return 1;
        if(height%4)return 2;
        hsize=width/4;
        vsize=height/4;
        SCCB_WR_Reg(0XFF,0X00);       
        SCCB_WR_Reg(0XE0,0X04);                                       
        SCCB_WR_Reg(0X51,hsize&0XFF);                //éè&#214;&#195;H_SIZEμ&#196;μí°&#203;&#206;&#187;
        SCCB_WR_Reg(0X52,vsize&0XFF);                //éè&#214;&#195;V_SIZEμ&#196;μí°&#203;&#206;&#187;
        SCCB_WR_Reg(0X53,offx&0XFF);                //éè&#214;&#195;offxμ&#196;μí°&#203;&#206;&#187;
        SCCB_WR_Reg(0X54,offy&0XFF);                //éè&#214;&#195;offyμ&#196;μí°&#203;&#206;&#187;
        temp=(vsize>>1)&0X80;
        temp|=(offy>>4)&0X70;
        temp|=(hsize>>5)&0X08;
        temp|=(offx>>8)&0X07;
        SCCB_WR_Reg(0X55,temp);                                //éè&#214;&#195;H_SIZE/V_SIZE/OFFX,OFFYμ&#196;&#184;&#223;&#206;&#187;
        SCCB_WR_Reg(0X57,(hsize>>2)&0X80);        //éè&#214;&#195;H_SIZE/V_SIZE/OFFX,OFFYμ&#196;&#184;&#223;&#206;&#187;
        SCCB_WR_Reg(0XE0,0X00);       
        return 0;
}
//&#184;&#195;oˉêyéè&#214;&#195;í&#188;&#207;&#241;3&#223;′&#231;′óD&#161;,ò2&#190;íê&#199;&#203;ù&#209;&#161;&#184;&#241;ê&#189;μ&#196;ê&#228;3&#246;·&#214;±&#230;&#194;ê
//UXGA:1600*1200,SVGA:800*600,CIF:352*288
//width,height:í&#188;&#207;&#241;&#191;í&#182;èoíí&#188;&#207;&#241;&#184;&#223;&#182;è
//·μ&#187;&#216;&#214;μ:0,éè&#214;&#195;3é1|
//    &#198;&#228;&#203;&#251;,éè&#214;&#195;꧰ü
u8 OV2640_ImageSize_Set(u16 width,u16 height)
{
        u8 temp;
        SCCB_WR_Reg(0XFF,0X00);                       
        SCCB_WR_Reg(0XE0,0X04);                       
        SCCB_WR_Reg(0XC0,(width)>>3&0XFF);                //éè&#214;&#195;HSIZEμ&#196;10:3&#206;&#187;
        SCCB_WR_Reg(0XC1,(height)>>3&0XFF);                //éè&#214;&#195;VSIZEμ&#196;10:3&#206;&#187;
        temp=(width&0X07)<<3;
        temp|=height&0X07;
        temp|=(width>>4)&0X80;
        SCCB_WR_Reg(0X8C,temp);       
        SCCB_WR_Reg(0XE0,0X00);                                 
        return 0;
}











友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。