2016-11-20 57 views
0

我需要使用VIPS按2或3倍縮小一些圖像。這必須通過簡單的像素裝倉(像素平均)來實現,而不需要額外的平滑或插值。使用VIPS按像素組合縮小圖像

VIPS在爲調整圖像大小(調整大小,收縮,減少,仿射等)不同的抽象層次提供了多種功能。它還提供具有這些功能的不同插值方法。

我不知道的功能和方法的組合導致簡單的像素組合在VIPS。一個簡單的例子會非常有幫助。

回答

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

我已經加了註釋的介紹手冊,解釋什麼縮水,減少做的那個部分。

+0

有沒有一種方法來影響xres和yres而不是寬度和高度? – retrography

+0

對不起,我不確定你的意思。你想更改圖像上的每英寸像元數? – user894763

+0

如果我可以在調整大小後單獨設置它,那太棒了! – retrography