web-dev-qa-db-ja.com

matplotlibとnumpyで画像上に円を描く

中心を保持するfloat x/y配列があります。

import matplotlib.pylab as plt
import numpy as np
npX = np.asarray(X)
npY = np.asarray(Y)
plt.imshow(img)
// TO-DO
plt.show()

このセンターを使用して画像に円を表示したい。どうすればこれを達成できますか?

13
orkan

matplotlib.patches.Circleパッチでこれを行うことができます。

あなたの例では、XおよびY配列をループしてから、各座標に円パッチを作成する必要があります。

これは、画像の上に円を配置する例です(matplotlib.cbookから)

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle

# Get an example image
import matplotlib.cbook as cbook
image_file = cbook.get_sample_data('grace_hopper.png')
img = plt.imread(image_file)

# Make some example data
x = np.random.Rand(5)*img.shape[1]
y = np.random.Rand(5)*img.shape[0]

# Create a figure. Equal aspect so circles look circular
fig,ax = plt.subplots(1)
ax.set_aspect('equal')

# Show the image
ax.imshow(img)

# Now, loop through coord arrays, and create a circle at each x,y pair
for xx,yy in Zip(x,y):
    circ = Circle((xx,yy),50)
    ax.add_patch(circ)

# Show the image
plt.show()

enter image description here

22
tmdavison