2016-05-04 11 views
0

私は多くの方法を試しましたが、どれもうまくいかないようです。どこでも私は人々がセットbbox_inches='tight'と言うように見えますが、それは動作していないようです。画像の上にプロットするときにmatplotlibの空白を削除します

基本的に私の目標は、ピクセル座標でイメージの上にいくつかの点をプロットし、ボーダーの周りに空白を入れずに保存することです。私のコードは現在次のようになっています:

import matplotlib.pyplot as plt 
plt.ion() 
img = plt.imread('myimage.jpg') 
ymax, xmax, _ = img.shape 
plt.imshow(img, extent=[0,xmax,ymax,0]) # switch to pixel coords 
plt.plot([100,200,300],[100,200,300],'ro') 
plt.imshow(img, extent=[0,xmax,ymax,0]) # recenter plot 
plt.axis('off') 
plt.savefig('out.jpg', bbox_inches='tight', pad_inches=0) 

しかし、私の保存されたイメージにはまだ周囲に白い境界線があります。これをどうすれば解決できますか?

+0

matplotlibのはかなりそれがどのように動作するかの点ではMathWorks社のMATLABと同じなので。 – Vivek

答えて

0

オプションは、軸の目盛りを考慮してFigureを表示しようとしているようです。それを避けるためには、数字の実際の範囲をplt.savefigメソッドに渡すことができます。

import matplotlib.pyplot as plt 
img = plt.imread('myimage.jpg') 

ymax, xmax, _ = img.shape 
plt.imshow(img, extent=[0,xmax,ymax,0]) # switch to pixel coords 
plt.plot([100,200,300],[100,200,300],'ro') 
plt.imshow(img, extent=[0,xmax,ymax,0]) # recenter plot 
plt.axis('off') 

# get figure and axis handle 
fig = plt.gcf() 
ax = plt.gca() 
# get axis extent 
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()) 
plt.savefig('out.jpg', bbox_inches=extent) 

何らかの理由で、図に小さな白い辺を追加したい場合でも、それを行うことができます。ただ従う

extent2 = extent.expanded(1.01, 1.01) 
plt.savefig('out.jpg', bbox_inches=extent2) 

として範囲を拡大し、他のオプションが完全にmatehat'sの提案を使用して軸の境界オフを取り除くためになります。

import matplotlib.pyplot as plt 


img = plt.imread('myimage.jpg') 
ymax, xmax, _ = img.shape 
my_dpi = 80. 
my_figsize = [xmax/my_dpi, ymax/my_dpi] 
fig = plt.figure(figsize=my_figsize, dpi=my_dpi) 
ax = plt.Axes(fig, [0., 0., 1., 1.]) 
ax.set_axis_off() 
fig.add_axes(ax) 

h_im = ax.imshow(img, aspect = 'equal', extent=[0,xmax,ymax,0]) 
plt.plot([100,200,300],[100,200,300],'ro') 
plt.axis(h_im.get_extent()) 
plt.savefig('out.jpg', dpi = my_dpi) 

最終画像は元の画像サイズを持ちますが、2つの画像の間にはサブピクセルの差があります。下の図は、myimage.jpgout.jpgの違いを示しています。

Difference between original image and output image

+0

これは出力の縦横比を変更します。保存した画像を入力画像と同じサイズにします。どうすればいい? – Vivek

+0

答えを変更しました。 – hashmuke

関連する問題