我需要使用VIPS按2或3倍縮小一些圖像。這必須通過簡單的像素裝倉(像素平均)來實現,而不需要額外的平滑或插值。使用VIPS按像素組合縮小圖像
VIPS在爲調整圖像大小(調整大小,收縮,減少,仿射等)不同的抽象層次提供了多種功能。它還提供具有這些功能的不同插值方法。
我不知道的功能和方法的組合導致簡單的像素組合在VIPS。一個簡單的例子會非常有幫助。
我需要使用VIPS按2或3倍縮小一些圖像。這必須通過簡單的像素裝倉(像素平均)來實現,而不需要額外的平滑或插值。使用VIPS按像素組合縮小圖像
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/Y殘餘物,你需要使用這些值的新形象改變。要設置新值,請使用.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")
我已經加了註釋的介紹手冊,解釋什麼縮水,減少做的那個部分。
有沒有一種方法來影響xres和yres而不是寬度和高度? – retrography
對不起,我不確定你的意思。你想更改圖像上的每英寸像元數? – user894763
如果我可以在調整大小後單獨設置它,那太棒了! – retrography