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

问题描述 投票:0回答:4

我有一个代表Array2D的图像:

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

评论在图书馆。我没有关于解释的线索。

有人会:

  1. 解释什么是3分量通道+ alpha通道
  2. 展示我如何根据mPixData调整此图像的大小
c++ image image-processing
4个回答
2
投票

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

  1. 类型定义意味着它正在创建一个无符号字符的二维数组(允许您存储最多255个值)。 template<class T = uint8_t> Array2D<T>
  2. 然后,mPixData本身就是一个数组,这意味着在每个坐标中,你有四个值(要与之竞争的字节),3个用于颜色(比方说RGB,但可能是其他的),1表示Alpha。
  3. “图像”基本上是这个三维数组。据推测,在将内容加载到输入中时,它会调整输入大小 - 您需要做的是找到某种形式的大小调整算法(我自己不是图像处理专家,但我确定谷歌会透露一些东西),这样你就可以了这些数据并做你需要的......

1
投票

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

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()函数。


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

© www.soinside.com 2019 - 2024. All rights reserved.