如何在C ++中调整图像大小?

时间:2010-10-28 12:05:14

标签: c++ image image-processing

我有一个代表Array2D的图像:

template<class T = uint8_t>
Array2D<T> mPixData[4];  ///< 3 component channels + alpha channel.

评论在库中。我没有关于解释的线索。

有人会:

  1. 解释3个分量通道+ alpha通道的含义是什么

  2. 显示如何根据mPixData

  3. 调整此图像的大小

4 个答案:

答案 0 :(得分:2)

不知道这是什么图书馆,这里是黑暗中的刺:

  1. 类型定义意味着它正在创建一个无符号字符的二维数组(允许您存储最多255的值。

    template<class T = uint8_t> Array2D<T>

  2. 然后,mPixData本身就是一个数组,这意味着在每个坐标上,你有四个值(要争用的字节数),3个用于颜色(让我们说RGB,但可能是其他的)和1为Alpha。

  3. “图像”基本上是这个三维数组。据推测,在将内容加载到输入中时,它会调整输入大小 - 您需要做的是找到某种形式的大小调整算法(我自己不是图像处理专家,但我确定谷歌会透露一些东西),这样你就可以了这些数据并做你需要的......

答案 1 :(得分:1)

1)3个分量通道 - 红绿蓝通道。 alpha通道讲述图像透明度

2)您可以使用许多算法来调整图像大小。最简单的是丢弃额外的像素。另一个简单的是插值

答案 2 :(得分:1)

3分量通道代表红绿蓝(又称RGB)通道。第四个渠道ALPHA是透明度渠道。

像素由mPixData[4]

定义
mPixData[0] -> R
mPixData[1] -> G
mPixData[2] -> B
mPixData[3] -> A

因此,图像可以表示为mPixData [4]的向量或数组。如您所说,在这种情况下是Array2D<T> mPixData[4];

Resize/rescale/resample an image不是一个简单的过程。网上有很多关于它的资料,我认为你应该考虑使用图书馆来做这件事。检查CxImage(Windows / Linux)。

有一些代码here,但我还没有测试过。检查resample()函数。

答案 3 :(得分:1)

嗨3个频道是rgb + alpha频道。所以红绿蓝通道和alpha通道。降尺度有几种方法。你可以采用例如每4个像素,但结果看起来很糟糕,看看不同的插值方法,例如:http://en.wikipedia.org/wiki/Bilinear_interpolation

或者如果您想使用库,请使用:http://www.imagemagick.org/Magick++/

或如karlphillip所述: http://www.xdp.it/cximage.htm