Suppression de la bordure blanche autour d'une image lors de l'utilisation de matplotlib sans enregistrer l'image

Kev1n91

J'ai le code suivant:

#load in image
image = cv2.imread('lenna.png')
title = "foo"

ax = plt.axes([0,0,1,1])
ax.clear()
height, width = image.shape[:2]
ax.axis('off')
ax.set_title(title)

#some things plotted etc.

Mais ensuite, j'ai besoin de la figure en tant que tableau numpy pour un calcul plus approfondi, donc je fais ce qui suit:

masked_image = image
ax.imshow(masked_image.astype(np.uint8),interpolation="nearest")
ax.figure.canvas.draw()
w,h = ax.figure.get_size_inches()*ax.figure.get_dpi()
I = np.fromstring(ax.figure.canvas.tostring_rgb(),dtype=np.uint8).reshape(int(h),int(w),3)

#Has the white borders around it
Image.fromarray(I)

Cependant, il Iy a encore des bordures blanches autour d'elle, y a-t-il un moyen facile de supprimer les bordures blanches sans enregistrer la figure?

L'image que j'ai utilisée est la suivante:

entrez la description de l'image ici

qui n'a pas de bordures blanches autour

Cependant, après le code ci-dessus, cela ressemble à ce qui suit: entrez la description de l'image ici

Qui a maintenant des barres blanches autour de lui.

D'autres solutions déjà publiées à ce problème reposent toutes sur la sauvegarde de l'image, ce que je ne veux pas

ImportanceOfErnest

Peu importe que vous sauvegardiez la figure ou non. Deux conditions doivent être remplies pour ne pas avoir d'espace blanc autour d'une image.

1. Marges des figures

Vous ne devez avoir aucun espace entre les axes et le bord de la figure. Ceci peut être réalisé en définissant les paramètres de sous-tracé

fig, ax = plt.subplots()
fig.subplots_adjust(0,0,1,1)

ou en réglant manuellement la position des axes

fig= plt.figure()
fig.add_axes([0,0,1,1])

Cette dernière est l'approche que vous avez adoptée dans la question, donc cette partie est très bien.

2. L'aspect de la figure

Les images sont affichées avec un aspect égal, ce qui signifie que chaque pixel est au carré. Ceci est généralement souhaité pour les images, mais cela conduit à des axes ne s'étendant pas dans les deux directions de manière égale.
Le problème auquel vous faites face ici est dû au fait que la figure a un aspect différent de l'image.

Supposons que vous ayez une image de forme (n,m)( mpixels de large, npixels de haut); alors la condition nécessaire pour ne pas avoir d'espace autour de votre image est que

n/m == h/w

w, hsont respectivement la largeur et la hauteur de la figure.

Ainsi, vous pouvez directement définir la taille de la figure sur la forme du tableau multipliée par le dpi,

fig, ax = plt.subplots(figsize=(m*100,n*100), dpi=100)

ou tout autre multiple au cas où vous n'auriez pas besoin d'avoir un pixel par pixel dans la sortie. Dans le cas où vous ne vous souciez pas du tout de la taille de la figure, mais avez toujours besoin d'une figure avec le même aspect que l'image que vous pouvez utiliserfigaspect

figsize=plt.figaspect(image)

Pour fournir un exemple de travail complet ici, ce qui suit crée une figure avec une image qui n'a pas d'espace autour d'elle.

import matplotlib.pyplot as plt
import numpy as np

a = np.random.rand(5,3)

fig, ax = plt.subplots(figsize=plt.figaspect(a))
fig.subplots_adjust(0,0,1,1)
ax.imshow(a)

plt.show()

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  2. 2

    J'ai besoin de savoir si ces deux phrases sont les mêmes en programmation

  3. 3

    Microsoft.WebApplication.targets

  4. 4

    Création d'un nouvel objet d'une classe avec un nouveau nom en cliquant sur un bouton dans java swing

  5. 5

    La taille de la forme n'est pas égale à la taille de la cellule du tableau et ajuste le texte à l'intérieur de la forme

  6. 6

    Javascript indiquant "impossible de définir la propriété 'innerHTML' sur null"

  7. 7

    Pourquoi utiliser Asyncio ne réduit pas le temps d'exécution global en Python et n'exécute pas les fonctions simultanément?

  8. 8

    Création d'un rappel python pour une fonction C à partir d'une DLL avec un tampon char.

  9. 9

    Trouver l'intersection et l'union de deux rectangles

  10. 10

    Comment convertir une chaîne en tuple en utilisant `reads`?

  11. 11

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  12. 12

    Restauration de la sauvegarde de la base de données SQL Server sur la version inférieure

  13. 13

    Nextcloud avec Docker: impossible de créer ou d'écrire dans le répertoire de données

  14. 14

    Compter combien de fois un nombre apparaît dans un tableau aléatoire

  15. 15

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

  16. 16

    java.lang.NoClassDefFoundError: org / springframework / data / repository / config / BootstrapMode

  17. 17

    Créer un graphique à barres avec une fréquence relative / à partir d'un objet de table dans R

  18. 18

    comment le contrôle de tableau javascript devrait-il être

  19. 19

    Importation bizarre de Google Sheets importxml - Impossible d'obtenir le chemin correct vers les éléments

  20. 20

    Injecter des éléments dans une liste existante au printemps

  21. 21

    Placez le modeBar en haut au centre à l'aide de plotly.js

chaudétiquette

Archive