gpt4 book ai didi

python - 哪种插值最适合调整图像大小?

转载 作者:太空狗 更新时间:2023-10-29 20:56:14 24 4
gpt4 key购买 nike

我有一个 numpy 数组,我希望使用 opencv 调整它的大小。它的值范围从 0 到 255。如果我选​​择使用 cv2.INTER_CUBIC,我可能会得到这个范围之外的值。这是不可取的,因为调整大小的数组应该仍然表示图像。一种解决方案是将结果裁剪到 [0, 255]。另一种是使用不同的插值方法。据我了解,使用 INTER_AREA 对图像进行下采样是有效的,但在对图像进行上采样时,其工作方式与最近邻相似,因此渲染效果不符合我的目的。

我应该使用 INTER_CUBIC(和剪辑)、INTER_AREA 还是 INTER_LINEAR?

使用 INTER_CUBIC 的值超出范围的示例:

a = np.array( [ 0, 10, 20, 0, 5, 2, 255, 0, 255 ] ).reshape( ( 3, 3 ) )
[[ 0 10 20]
[ 0 5 2]
[255 0 255]]

b = cv2.resize( a.astype('float'), ( 4, 4 ), interpolation = cv2.INTER_CUBIC )
[[ 0. 5.42489886 15.43670964 21.29199219]
[ -28.01513672 -2.46422291 1.62949324 -19.30908203]
[ 91.88964844 25.07939219 24.75106835 91.19140625]
[ 273.30322266 68.20603609 68.13853455 273.15966797]]

编辑:正如 berak 指出的那样,将类型转换为 float (从 int64)允许原始范围之外的值。 cv2.resize() 函数不适用于默认的“int64”类型。但是,转换为“uint8”会自动将值饱和到 [0..255]。

此外,正如 SaulloCastro 所指出的,另一个相关的答案演示了 scipy 的插值,并且默认方法是三次插值(具有饱和度)。

最佳答案

如果您正在放大图像,您应该更喜欢使用INTER_LINEARINTER_CUBIC 插值。如果您要缩小图像,您应该更喜欢使用INTER_AREA插值。

三次插值在计算上更复杂,因此比线性插值慢。但是,生成的图像质量会更高。

关于python - 哪种插值最适合调整图像大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23853632/

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