web-dev-qa-db-ja.com

pythonで画像の背景にプロットする

Matplotlibを使用して画像の背景にグラフをプロットしたいと思います。 matlabでそれを行う方法を見つけました http://www.peteryu.ca/tutorials/matlab/plot_over_image_background

私はこのような基本的なものを試しました:

im = plt.imread("dd.png")
implot = plt.imshow(im)
theta=np.linspace(0,2*np.pi,50)
z=np.cos(theta)*39+145
t=np.sin(theta)*39+535-78+39
plt.plot(z,t)
plt.show()

しかし、それは私に本当にsomethingい何かを与えました:

something really ugly

16
A.Tipe

リンクしたMATLABの例のように、imshowを呼び出すときに、イメージの目的の範囲を指定する必要があります。

既定では、matplotlibとMATLABはどちらも画像の左上隅をOriginに配置し、そこから右下に移動し、各ピクセルを座標空間で1x1の正方形として設定します。これがあなたの画像がしていることです。

これは、リストの形式をとるextentパラメーターで制御できます[left, right, bottom, top]

エクステントを使用しない場合は次のようになります。

import matplotlib.pyplot as plt
img = plt.imread("airlines.jpg")
fig, ax = plt.subplots()
ax.imshow(img)

enter image description here

サミュエルL.ジャクソンの1600 x 1200が、率直に言って、飛行機に乗っているヘビにかなり悩まされていることがわかります。

しかし、これを介して両方の次元で0から300の範囲の線をプロットしたい場合は、次のようにします。

fig, ax = plt.subplots()
x = range(300)
ax.imshow(img, extent=[0, 400, 0, 300])
ax.plot(x, x, '--', linewidth=5, color='firebrick')

enter image description here

この線が蛇の問題でジャクソン氏を助けるかどうかはわかりません。少なくとも、物事が難しくなることはありません。

62
Paul H