Comment superposer directement un nuage de points sur une image jpg dans matplotlib / Python?

je dois rapidement tracer les cadres jpg qui résultent comme la sortie d'un algorithme de suivi. Les cadres jpg sont accompagnés de fichiers texte contenant des données simples (x,y) localisant les cibles d'image qui sont suivies. Je voudrais utiliser matplotlib pour tracer les images jpg, puis superposer un nuage de points des données (x,y) qui est lu à partir du fichier texte et stocké dans une liste pythonique. Ci-dessous est le code qui va tracer l'image jpg, mais dans tout le récurage que j'ai fait de matplotlib, scipy, et Manuels de la LIP et pages d'aide, Je ne trouve rien qui explique comment maintenir cette fenêtre de représentation graphique et simplement superposer un diagramme de dispersion de marqueurs simples à divers (x,y) endroits de l'image. Toute aide est grandement appréciée.

import matplotlib.pyplot as plt;
im = plt.imread(image_name);
implot = plt.imshow(im);
plt.show()
24
demandé sur Paul 2011-02-22 05:21:20

3 réponses

pyplot.scatter() fonction a été faite sur mesure pour cette raison:

import matplotlib.pyplot as plt
im = plt.imread(image_name)
implot = plt.imshow(im)

# put a blue dot at (10, 20)
plt.scatter([10], [20])

# put a red dot, size 40, at 2 locations:
plt.scatter(x=[30, 40], y=[50, 60], c='r', s=40)

plt.show()

Voir la documentation pour en savoir plus.

34
répondu lothario 2011-02-22 02:47:43

cela devrait fonctionner:

import matplotlib.pyplot as plt
im = plt.imread('test.png')
implot = plt.imshow(im)
plt.plot([100,200,300],[200,150,200],'o')
plt.show()

gardez à l'esprit que chaque pixel de l'image est une unité sur les axes x,Y. 'o' est une abréviation de manière à obtenir des plot fonction à utiliser des cercles au lieu de lignes.

9
répondu Paul 2011-02-22 02:51:17

je sais que cela a été répondu, mais de la même façon zorder fonctionne aussi. Ce qui est génial si vous voulez mettre quelque chose sur un scatterplot ou sous lui

import matplotlib as plt
im = plt.imread(image_name)
plt.imshow(im,zorder=1)
plt.scatter(x,y,zorder=2)
plt.show()

ZOrder inférieur signifie qu'il est au-dessous d'autres choses

3
répondu Ceddrick 2016-06-30 19:51:34