2016-01-20 28 views
7

tôi có float x/y mảng giữ vòng tròn các trung tâm.vẽ hình tròn trên hình ảnh với matplotlib và numpy

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

tôi muốn hiển thị vòng kết nối trên hình ảnh của mình bằng cách sử dụng các trung tâm này. Làm thế nào tôi có thể đạt được điều này?

+2

có thể trùng lặp của [vẽ một vòng tròn với pyplot] (http://stackoverflow.com/questions/9215658/plot-a-circle-with-pyplot) – kazemakase

+0

bạn có chắc chắn không? .. – orkan

+0

Khá như vậy. Câu trả lời cho câu hỏi đó cho thấy cách vẽ vòng tròn, chính xác là những gì bạn đã yêu cầu :) – kazemakase

Trả lời

10

Bạn có thể thực hiện việc này với bản vá matplotlib.patches.Circle.

Ví dụ của bạn, chúng ta cần lặp qua các mảng X và Y, sau đó tạo một bản vá vòng tròn cho mỗi tọa độ.

Dưới đây là một ví dụ đặt vòng tròn trên đỉnh của một hình ảnh (từ 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

+0

cảm ơn ví dụ tuyệt vời của bạn – orkan

+0

là các vòng tròn trong ô, chứ không phải trên hình ảnh. img sẽ không được thay đổi –

+0

@andrewmatuk: ý của bạn là gì? Nếu bạn lưu hình ảnh bằng cách sử dụng 'savefig' các vòng tròn cũng sẽ được lưu – tom

Các vấn đề liên quan