使用 VIPS 通过像素合并缩小图像
Shrinking image by pixel-binning using VIPS
我需要使用 VIPS 将一些图像缩小 2 或 3 倍。这必须通过简单的像素合并(像素平均)来实现,无需额外的平滑或插值。
VIPS 提供了多种不同抽象级别的函数来调整图像大小(调整大小、缩小、缩小、仿射等)。它还提供了具有这些功能的不同插值方法。
我想知道是什么功能和方法的组合导致了 VIPS 中的简单像素合并。一个基本的例子会很有帮助。
你需要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")
我在手册的那一节的介绍中添加了注释,解释了 shrink 和 reduce 的作用。
我需要使用 VIPS 将一些图像缩小 2 或 3 倍。这必须通过简单的像素合并(像素平均)来实现,无需额外的平滑或插值。
VIPS 提供了多种不同抽象级别的函数来调整图像大小(调整大小、缩小、缩小、仿射等)。它还提供了具有这些功能的不同插值方法。
我想知道是什么功能和方法的组合导致了 VIPS 中的简单像素合并。一个基本的例子会很有帮助。
你需要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")
我在手册的那一节的介绍中添加了注释,解释了 shrink 和 reduce 的作用。