使用VIPS通过像素合并缩小图像

时间:2016-11-20 01:30:26

标签: python image-processing vips

我需要使用VIPS将一些图像缩小2或3倍。这必须通过简单的像素合并(像素平均)来实现,而无需额外的平滑或插值。

VIPS提供了不同抽象级别的几种功能,用于调整图像大小(调整大小,缩小,缩小,仿射等)。它还提供了具有这些功能的不同插值方法。

我想知道功能和方法的组合会导致VIPS中的简单像素合并。一个基本的例子非常有用。

1 个答案:

答案 0 :(得分:1)

您需要shrink。使用整数参数,它可以对像素进行简单的块平均。

im = Vips.Image.new_from_file("somefile.jpg")
im = im.shrink(2, 2)
im.write_to_file("someotherfile.tif")

像素格式保持不变,因此对于uchar图像,您将获得uchar平均值,四舍五入到最接近的值。如果你想要不同的东西,可以自己浮动,收缩和绕圈。

libvips将图像分辨率(每英寸的像素数,或单位的像素数)视为一个元数据,由系统随身携带并用于加载和保存操作,但不由vips本身更新。这是因为图像分辨率通常比每个距离的像素的简单测量更复杂,并且应用程序比图书馆更有可能做正确的事情。

如果您想宣读决议,请使用.xres.yres。它们始终以每毫米像素为单位,并在加载时转换为适当的单位并保存。

print "im.xres =", im.xres, "ppm"

libvips图像是不可变的,因此您无法分配到xres / yres,您需要创建一个新图像,并更改这些值。要设置新值,请使用.copy()。在幕后,.copy()只是复制指针,所以它非常快。上面的例子可能是:

im = Vips.Image.new_from_file("somefile.jpg")
im = im.shrink(2, 2)
im = im.copy(xres = im.xres / 2.0, yres = im.yres / 2.0)
im.write_to_file("someotherfile.tif")

我在手册的该部分的介绍中添加了一个注释,说明缩小和缩小的内容。