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

我有一个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,5,2,255,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的插值,并且defualt方法是三次插值(具有饱和度).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值