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

python– 哪种插值最适合调整图像大小?,第1张

概述我有一个numpy数组,我希望使用opencv调整大小.它的值范围从0到255.如果我选择使用cv2.INTER_CUBIC,我可能会得到超出此范围的值.这是不希望的,因为调整大小的数组应该仍然代表图像.一种解决方案是将结果剪辑为[0,255].另一种是使用不同的插值方法.我的理解是,使用INTER_AREA对于对图像进行下采样是有效的,但是对于对其进行上采

我有一个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方法是三次插值(具有饱和度).

最佳答案我认为你应该从INTER_liNEAR开始,这是resize()函数的默认选项.它结合了足够好的视觉效果和足够好的时间性能(尽管它没有INTER_NEAREST快).它不会创建那些超出范围的值. 总结

以上是内存溢出为你收集整理的python – 哪种插值最适合调整图像大小?全部内容,希望文章能够帮你解决python – 哪种插值最适合调整图像大小?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1207900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存