我有浮动 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()
我想通过使用这个中心在我的图像上显示圆圈。我怎样才能做到这一点?
答案 0 :(得分:19)
您可以使用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()
答案 1 :(得分:1)
要获取图像,而不是 plt.show 做(无需保存到光盘即可获取):
io_buf = io.BytesIO()
fig.savefig(io_buf, format='raw')#dpi=36)#DPI)
io_buf.seek(0)
img_arr = np.reshape(np.frombuffer(io_buf.getvalue(), dtype=np.uint8),
newshape=(int(fig.bbox.bounds[3]), int(fig.bbox.bounds[2]), -1))
io_buf.close()
plt.close() #To not display the image