7
votes

Comment présenter une matrice numpie dans la surface pygame?

J'écris un code qu'une partie de celle-ci lit une source d'image et l'affiche à l'écran de l'utilisateur pour interagir. J'ai aussi besoin des données d'image aiguisées. J'utilise ce qui suit pour lire les données et l'afficher dans pygame xxx

et l'image est affichée à l'écran uniquement pivotée et inversée. Est-ce dû à des différences entre misc.imread et pygame ? Ou est-ce dû à quelque chose qui ne va pas dans mon code?

Y a-t-il une autre façon de faire cela? La majorité de la solution que j'ai lu impliquait la sauvegarde de la figure puis la lisant avec «pygame».


0 commentaires

4 Réponses :


1
votes

Ma suggestion est d'utiliser le module pygame.transform code>. Il existe le Flip code> et Tourner les méthodes code>, que vous pouvez utiliser à votre transformation. Recherchez les documents à ce sujet.

Ma recommandation consiste à enregistrer l'image de sortie à une nouvelle surface code>, puis appliquez les transformations et blit à l'écran. P>

temp_surf = pygame.Surface((w,h))
pygame.surfarray.blit(temp_surf, scan)

'''transform temp_surf'''

screen.blit(temp_surf, (0,0))


0 commentaires

1
votes

Chaque lib a sa propre façon d'interpréter des tableaux d'image. Par "tourné", je suppose que vous voulez dire transposé. C'est comme ça que Pygame montre des tableaux numpus. Il y a de nombreuses façons de le rendre "correct". En fait, il existe de nombreuses façons même de montrer le tableau, ce qui vous donne un contrôle total sur la représentation du canal et ainsi de suite. Dans PYGAME Version 1.9.2, il s'agit du rendu de la matrice la plus rapide que je puisse réaliser. (Remarque pour la version antérieure, cela ne fonctionnera pas!). Cette fonction remplira la surface avec la matrice:

# put array data into a pygame surface
def put_arr(surface, myarr):
    bv = surface.get_buffer()
    bv.write(myarr.tostring(), 0)


0 commentaires

4
votes

J'utilise souvent la méthode Numpy Swapaxes () Code> Dans ce cas, nous n'avons besoin que d'inverser l'axe X et Y (axe numéro 0 et 1) avant d'afficher notre tableau:

return image.swapaxes(0,1),out


0 commentaires

2
votes

Je pensais que Technico a fourni une bonne solution - juste un peu maigre sur Info. En supposant que get_arr () est une fonction qui renvoie le tableau de pixels: xxx

alternativement, si vous savez que l'image sera toujours des mêmes dimensions (qu'en iterating via des cadres d'une vidéo ou d'un gif Fichier), il serait plus efficace de réutiliser la même surface: xxx

ymmv, mais jusqu'à présent, cela fonctionne bien pour moi.


0 commentaires