Sadaei Osakabe
/
OV7670_with_AL422B_Color_Size_test
OV7670_with_AL422B Color & Size Test Program
Diff: main.cpp
- Revision:
- 4:2c412c97678c
- Parent:
- 3:e23726af9d38
--- a/main.cpp Sun Feb 17 12:42:55 2013 +0000 +++ b/main.cpp Mon Feb 18 07:53:46 2013 +0000 @@ -1,4 +1,5 @@ #define BITMAPFILE +#undef BAYERBITMAPFILE #undef HEXFILE #undef COLORBAR @@ -19,7 +20,8 @@ int sizex = 0; int sizey = 0; -#ifdef BITMAPFILE +#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE) + #define FILEHEADERSIZE 14 //ファイルヘッダのサイズ #define INFOHEADERSIZE 40 //情報ヘッダのサイズ #define HEADERSIZE (FILEHEADERSIZE+INFOHEADERSIZE) @@ -92,38 +94,31 @@ pc.printf("Before Init...\r\n"); camera.PrintRegister(); - - camera.InitForFIFOWriteReset(); pc.printf("Select color format.\r\n") ; pc.printf("1: RGB444.\r\n"); pc.printf("2: RGB555.\r\n"); pc.printf("3: RGB565.\r\n"); pc.printf("4: YUV(UYVY).\r\n"); - pc.printf("5: Bayer RGB(GBGB... RGRG...).\r\n"); + pc.printf("5: Bayer RGB(BGBG... GRGR...).\r\n"); while(!pc.readable()); char color_format = pc.getc(); switch (color_format) { case '1': camera.InitRGB444(); - camera.InitDefaultReg(); break; case '2': camera.InitRGB555(); - camera.InitDefaultReg(); break; case '3': camera.InitRGB565(); - camera.InitDefaultReg(); break; case '4': camera.InitYUV(); - camera.InitDefaultReg(); break; case '5': camera.InitBayerRGB(); - camera.InitDefaultReg(); break; } pc.printf("select %c\r\n", color_format); @@ -174,6 +169,9 @@ } pc.printf("select %c\r\n", screen_size); + camera.InitForFIFOWriteReset(); + camera.InitDefaultReg(); + #ifdef COLORBAR camera.InitSetColorbar(); #endif @@ -184,7 +182,7 @@ // CAPTURE and SEND LOOP while(1) { -#if defined(BITMAPFILE) || defined(HEXFILE) +#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE) || defined(HEXFILE) pc.printf("Hit Any Key %dx%d Capture Data.\r\n", sizex, sizey) ; while(!pc.readable()); pc.printf("*\r\n"); @@ -203,7 +201,7 @@ bmp_line_data[i] = 0; } #endif -#ifdef BITMAPFILE +#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE) FILE *fp; char *filename = "/local/test.bmp"; if((fp = fopen(filename, "wb")) == NULL){ @@ -267,33 +265,6 @@ // RGB pc.printf ("%2X%2X%2X", r, g, b) ; */ -#ifdef COLOR_TRACKING - int colorR = 210, colorG = 120, colorB = 120; - int diffR, diffG, diffB; - diffR = abs(colorR - r); - diffG = abs(colorG - g); - diffB = abs(colorB - b); - if(diffR < 50 && diffG < 120 && diffB < 120) { - target = 1; - - xmin = min(xmin, x); - xmax = max(xmax, x); - ymin = min(ymin, y); - ymax = max(ymax, y); -#endif - -#ifdef DISPLAY - if( oled_x_start < x && x < oled_x_end && oled_y_start < y && y < oled_y_end) { - oled_color = r; - oled_color = (oled_color << 8) | g; - oled_color = (oled_color << 8) | b; - oled.pixel(x-oled_x_start, y-oled_y_start, oled_color); - } -#endif - -#ifdef COLOR_TRACKING - } -#endif } #ifdef BITMAPFILE fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp); @@ -340,14 +311,6 @@ // RGB pc.printf ("%2X%2X%2X", r, g, b) ; */ -#ifdef DISPLAY - if( oled_x_start < x && x < oled_x_end && oled_y_start < y && y < oled_y_end) { - oled_color = r; - oled_color = (oled_color << 8) | g; - oled_color = (oled_color << 8) | b; - oled.pixel(x-oled_x_start, y-oled_y_start, oled_color); - } -#endif index++; } #ifdef BITMAPFILE @@ -373,50 +336,65 @@ } for (int x=0; x<sizex; x++) { - // odd line GBGB... even line RGRG... + // odd line BGBG... even line GRGR... bayer_line_data[0][x] = (unsigned char)camera.ReadOneByte(); +#ifdef BAYERBITMAPFILE + bmp_line_data[x*3] = (unsigned char)bayer_line_data[0][x]; + bmp_line_data[x*3 + 1] = (unsigned char)bayer_line_data[0][x]; + bmp_line_data[x*3 + 2] = (unsigned char)bayer_line_data[0][x]; +#endif } +#ifdef BAYERBITMAPFILE + fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp); +#endif bayer_line[1] = bayer_line_data[0]; for (int y=1; y<sizey; y++) { int line = y%2; for (int x=0; x<sizex; x++) { - // odd line GBGB... even line RGRG... + // odd line BGBG... even line GRGR... bayer_line_data[line][x] = (unsigned char)camera.ReadOneByte(); +#ifdef BAYERBITMAPFILE + bmp_line_data[x*3] = (unsigned char)bayer_line_data[line][x]; + bmp_line_data[x*3 + 1] = (unsigned char)bayer_line_data[line][x]; + bmp_line_data[x*3 + 2] = (unsigned char)bayer_line_data[line][x]; +#endif } - +#ifdef BAYERBITMAPFILE + fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp); +#endif bayer_line[0] = bayer_line[1]; bayer_line[1] = bayer_line_data[line]; for (int x=0; x<sizex - 1; x++) { if(y%2==1) { if(x%2==0) { - // GB - // RG - b = bayer_line[0][x+1]; - g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1; - r = bayer_line[1][x]; - } else { // BG // GR b = bayer_line[0][x]; g = ((int)bayer_line[0][x+1] + bayer_line[1][x])>>1; r = bayer_line[1][x+1]; + } else { + // GB + // RG + b = bayer_line[0][x+1]; + g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1; + r = bayer_line[1][x]; } } else { if(x%2==0) { + // GR + // BG + b = bayer_line[1][x]; + g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1; + r = bayer_line[0][x+1]; + } else { // RG // GB b = bayer_line[1][x+1]; g = ((int)bayer_line[0][x+1] + bayer_line[1][x])>>1; r = bayer_line[0][x]; - } else { - // GR - // BG - b = bayer_line[1][x]; - g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1; - r = bayer_line[0][x+1]; } } #if defined(BITMAPFILE) || defined(HEXFILE) @@ -447,7 +425,7 @@ } camera.ReadStop(); -#ifdef BITMAPFILE +#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE) free(bmp_line_data); fclose(fp); #endif