WPZAC 发表于 2010-8-14 10:03:48

DE0+D5M采集的像素数据(RGB)转bmp格式



这个是用摄像头采集的数据RGB格式,打包为bmp之后存储到sd卡,可是却出现了这样的问题,请大家帮忙看看是什么原因造成的?谢谢!!

canic 发表于 2010-8-14 17:18:49

以前有研究過D5M,但沒有碰到類似現象,我猜是你的RGB轉換有問題,你可以把程序貼出來

WPZAC 发表于 2010-8-16 11:46:15

问题搞定。。。。。

zhuhuan0000 发表于 2010-8-18 10:55:03

同学,见到你搞定了bmp,可不可以发个案例过来参考哈!我QQ:1244673032

WPZAC 发表于 2010-8-19 08:26:11

回复 4# zhuhuan0000


   
#define BMP_NAME    "/mnt/host/capture.bmp"
#define DATA_OFFSET 54
alt_u8 header = {
0x42,      // identity : B
0x4d,      // identity : M
0, 0, 0, 0,// file size
0, 0,      // reserved1
0, 0,      // reserved2
54, 0, 0, 0, // RGB data offset
40, 0, 0, 0, // struct BITMAPINFOHEADER size
0, 0, 0, 0,// bmp width
0, 0, 0, 0,// bmp height
1, 0,      // planes
24, 0,       // bit per pixel
0, 0, 0, 0,// compression
0, 0, 0, 0,// data size
0, 0, 0, 0,// h resolution
0, 0, 0, 0,// v resolution
0, 0, 0, 0,// used colors
0, 0, 0, 0   // important colors
};

alt_u16 WIDTH = 800;
alt_u16 HEIGHT = 400;

int main() {
int i, j;

alt_u8image;// image array 800 * 400 * 3 = 960000

alt_u16 file_size;      // file size
FILE    *fp = NULL;   // file pointer for bmp file to write
alt_u32 data;
alt_u16 read_data1;
alt_u16 read_data2;
alt_u8r, g, b;

CMOS_CAPTURE_START(CMOS0_BASE);
usleep(1000 * 1000 * 10);
CMOS_CAPTURE_STOP(CMOS0_BASE);

for(j = 0; j < HEIGHT; j++) {
    for(i = 0; i < WIDTH; i++) {
      data = CMOS_READ(CMOS0_BASE);
      
      read_data1 = data & 0x0000ffff;
      read_data2 = ((data & 0xffff0000) >> 16);
      
      r = ((read_data2 & 0x03fc) >> 2);
      g = ((read_data1 & 0x7c00) >> 7) + ((read_data2 & 0x7000) >> 12);
      b = ((read_data1 & 0x03fc) >> 2);
      
      *(image + 3 * (WIDTH * j + i) + 0) = b;// B
      *(image + 3 * (WIDTH * j + i) + 1) = g;// G
      *(image + 3 * (WIDTH * j + i) + 2) = r;// R
    }
}

// file size
file_size = WIDTH * HEIGHT * 3 + DATA_OFFSET;
header = (alt_u8)(file_size & 0x000000ff);
header = (file_size >> 8 ) & 0x000000ff;
header = (file_size >> 16) & 0x000000ff;
header = (file_size >> 24) & 0x000000ff;

// width
header = WIDTH            & 0x000000ff;
header = (WIDTH    >> 8 ) & 0x000000ff;
header = (WIDTH    >> 16) & 0x000000ff;
header = (WIDTH    >> 24) & 0x000000ff;

// height
header = HEIGHT         & 0x000000ff;
header = (HEIGHT   >> 8 ) & 0x000000ff;
header = (HEIGHT   >> 16) & 0x000000ff;
header = (HEIGHT   >> 24) & 0x000000ff;

RGB打包为BMP代码

zhuhuan0000 发表于 2010-8-19 10:54:26

你QQ多少,有很多问题想请教你,

fpga_feixiang 发表于 2021-10-12 12:48:52

66666666666666666666
页: [1]
查看完整版本: DE0+D5M采集的像素数据(RGB)转bmp格式