gpt4 book ai didi

c++ - boost::gil 交错 View

转载 作者:太空狗 更新时间:2023-10-29 20:18:31 28 4
gpt4 key购买 nike

我在弄清楚 boost 图像库时遇到了一些问题。

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

我能找到的唯一提及是在 gil 教程中:

// 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);
}

此外,函数原型(prototype)说

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.

我的问题是,gil 在二进制格式中期望的格式到底是什么,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 的实际工作原理,那就太好了。提前致谢!

编辑:对不起大家,我刚刚意识到我的愚蠢错误。我现在开始工作了...:( 问题不在于图像的格式,而是它是行主要的,而不是列主要的

最佳答案

抱歉,伙计们,我在发布后立即意识到我使用 matlab 的时间太长了......我以列主要形式编写数组......呃我觉得很愚蠢

关于c++ - boost::gil 交错 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3851922/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com