如何使用CImg函数处理像素数据?

时间:2019-04-08 04:59:41

标签: c++ cimg

我正在使用Visual Studio,并希望找到一个有用的图像处理库,该库将处理基本的图像处理功能(例如旋转),这样我就不必继续手动对其进行编码。我遇到了CImg,它支持此功能以及许多其他有用的功能以及插值。

但是,我所看到的所有示例都显示了通过加载和使用完整图像来使用CImg。我想处理像素数据。所以我的循环很典型:

for (x=0;x<width; x++)
for (y=0;y<height; y++)

在这种情况下,我想执行双线性或双三次旋转,我看到CImg支持这一点。它提供了一个rotate()和get_rotate函数。

我在网上找不到任何示例,展示了如何将其用于像素数据。理想情况下,我可以简单地将像素颜色,x,y和插值方法传递给它,并使其返回结果。

有人可以提供任何有用的建议吗?如果CImg不是此类库的正确库,那么谁能推荐一个简单,轻便,易于使用的库?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用迭代器将像素数据复制到CImg类,并在完成后将其复制回。

std::vector<uint8_t> pixels_src, pixels_dst;
size_t width, height, n_colors;

// Copy from pixel data
cimg_library::CImg<uint8_t> image(width, height, 1, n_colors);
std::copy(pixels_src.begin(), pixels_src.end(), image.begin());

// Do image processing

// Copy to pixel data
pixels_dst.resize(width * height * n_colors);
std::copy(image.begin(), image.end(), pixels_dst.begin());