0

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

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

我想知道什么功能和方法的组合会导致 VIPS 中的简单像素合并。一个基本的例子会很有帮助。

4

1 回答 1

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")

我在手册该部分的介绍中添加了一个注释,解释了收缩和减少的作用。

于 2016-11-21T12:56:54.450 回答