1.介绍
在做图像处理过程中,我们有时会将图像缩小之后再进行处理,常用的开源图像算法包“Opencv”已经带有resize函数,用起来也是很容易上手的。
对于Opencv中函数原型:cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
参数:
interpolation - 插值方法,共有5种:
1)INTER_NEAREST - 最近邻插值法
2)INTER_LINEAR - 双线性插值法(默认)
3)INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
4)INTER_CUBIC - 基于4x4像素邻域的3次插值法
5)INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值
2.代码
我们用cv2.resize对于一张4k的图像进行缩放到768x512大小,另外选择最复杂的插值方法cv2.INTER_LANCZOS4,代码如下:
import cv2
img_path = "864_4K_Las_Vegas.png"
img1 = cv2.imread(img_path)
img1 = cv2.resize(img1, (768, 512), cv2.INTER_LANCZOS4)
cv2.imwrite("opencv.png", img1)
结果可以看下图,图中出现很多锯齿
3.改进
出现上面那种情况之后,我们就不能用Opencv里面这个函数,那么就自己写一个?幸好有人帮我们做了,那就是PIL,里面也有一个resize,其使用用法和Opencv差不多,我就不展开讲了,它的插值方法有如下可选:
代码跑一跑:
from PIL import Image
img = Image.open(img_path)
img2 = img.resize((768, 512))
img2.save("PIL_default.png")
img3 = img.resize((768, 512), Image.ANTIALIAS)
img3.save("PIL_Image_ANTIALIAS.png")
默认结果(和Opencv差不多):
Image.ANTIALIAS结果(正是我们所需要结果):文章来源:https://www.toymoban.com/news/detail-758317.html
文章来源地址https://www.toymoban.com/news/detail-758317.html
到了这里,关于图像处理之高质量缩放(抗锯齿)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!