2

一連の .bmp 画像を読み込んで、得たヒントに基づいて線形のコントラスト調整を行おうとしています。これらの画像は 112x112 と小さく、コントラストを調整する以外はまったく同じに見えるようにしたいと考えています。私はmatplotlibでそれをやろうとしましたが、何をしても画像の境界の周りに空白ができます。私が使用しているコードは次のとおりです。

# Open image and convert to array
oldImage = Image.open(f)
imageArray = np.array(oldImage)

# Preprocessing
vrange = stats.mquantiles(imageArray.flatten(),prob=[0.01,0.99])

# Plot and save
fig = plt.figure()
fig.set_size_inches(1,1)
fig.set_dpi(112)
plt.imshow(imageArray,cmap="gray",interpolation="Nearest",vmin=vrange[0],vmax=vrange[1]);
plt.axis('off')
plt.savefig(f[:-4] + "_adjusted.png", bbox_inches='tight')

パディングを削除する方法に関するヒントはありますか? 私はいくつかのグーグルを行いましたが、これまでのところ何も見つかりませんでした。

4

2 に答える 2

2

matplotlib なしでしきい値処理を行うことができます。

import os
from PIL import Image
import numpy as np
import scipy.stats.mstats as mstats

f = os.path.expanduser('~/tmp/image.png')
name, ext = os.path.splitext(f)
out = name+"_adjusted.png"

oldImage = Image.open(f).convert('L')
imageArray = np.array(oldImage)

vmin, vmax = mstats.mquantiles(imageArray.flatten(), prob=[0.01,0.99])

np.clip(imageArray, vmin, vmax, out=imageArray)
imageArray = (imageArray-vmin)*255/(vmax-vmin)
img = Image.fromarray(imageArray.astype('uint8'), 'L')
img.save(out)

この方法では、図のサイズをインチや DPI などで定義する必要はありません。PIL イメージを numpy 配列に変換し、計算を行い、PIL イメージに戻すだけです。

于 2013-03-02T23:38:24.640 に答える
-1

の前に次の行を追加しますplt.savefig()

plt.subplots_adjust(0,0,1,1,0,0)
于 2013-03-02T23:37:54.443 に答える