2010-10-03 25 views
3

我在计算boost图像库时遇到了一些麻烦。boost :: gil Interleaved_view

我找不到有关如何使用boost :: gil库中包含的interleaved_view函数的确切文档。更具体地讲,我不知道到底是什么二进制格式的原始数据应该存储在

它,只有提起我能找到的在吉尔教程:

// Calling with 8-bit RGB data into 16-bit BGR 
void XGradientRGB8_BGR16(const unsigned char* src_pixels, ptrdiff_t src_row_bytes, int w, int h, 
           signed short* dst_pixels, ptrdiff_t dst_row_bytes) { 
    rgb8c_view_t src = interleaved_view(w,h,(const rgb8_pixel_t*)src_pixels,src_row_bytes); 
    rgb16s_view_t dst = interleaved_view(w,h,( rgb16s_pixel_t*)dst_pixels,dst_row_bytes); 
    x_gradient(src,dst); 
} 

此外,函数原型说

template<typename Iterator> 
type_from_x_iterator< Iterator>::view_t  
boost::gil::interleaved_view (std::size_t width, std::size_t height, Iterator pixels, std::ptrdiff_t rowsize_in_bytes) 
//Constructing image views from raw interleaved pixel data. 

我的问题是,究竟是什么格式吉尔的二进制格式预期,并rowsize_in_bytes应该做的是什么?

我以前看过交错图像的唯一时间是使用OpenGL时,这只是每个像素存储在一起的RGB信息。我认为rowsize_in_bytes只想字面上以字节为单位的像素的行的大小,所以我试图写与此一个PNG:

void makeImage(const string fileName, const unsigned char * src, const int w, const int h) { 
    rgb8c_view_t outImage = interleaved_view(w,h, (const rgb8_pixel_t*) src, w*3*sizeof(unsigned char)); 
    boost::gil::png_write_view(fileName,outImage); 
} 

和输入SRC是的尺寸W * H的平面阵列形式

的,
(char)R, (char)G, (char)B, (char)R, (char)G, (char)B, (char)R, (char)G, (char)B ... 

该图像只是一个黑色背景上的白色方块。但是,我得到的结果是相当奇怪...

Results

如果任何人有任何想法,为什么发生这种情况,以及如何interleaved_view实际工作,那简直太好了。提前致谢!

编辑:对不起,我只是意识到我愚蠢的错误。我现在正在工作...... :(问题不是图像的格式,而是它是行主要的,而不是专业

回答

7

对不起,我刚刚发布后立即意识到,我一直在使用matlab的方式太长了......我写了列的主要形式的数组......呃,我觉得很蠢

+2

+1为承认你的错误,并写一个关于它的答案不要担心,其他人可能会犯同样的错误,并认为这有帮助。 – schnaader 2010-10-03 23:10:20