Maison > développement back-end > Tutoriel Python > Utiliser Python pour traiter des images afin d'obtenir un accès aux pixels dans les images

Utiliser Python pour traiter des images afin d'obtenir un accès aux pixels dans les images

不言
Libérer: 2018-05-04 14:06:17
original
2485 Les gens l'ont consulté

Cet article présente principalement l'utilisation de python pour traiter les images afin d'obtenir l'accès aux pixels dans les images. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent se référer à certains des exemples précédents

<.> , nous utilisons tous Image.open() pour ouvrir une image, puis opérons directement sur l'objet PIL. Ce n'est pas grave s'il s'agit juste d'une opération simple, mais c'est plus difficile si c'est un peu plus compliqué. Par conséquent, généralement après avoir chargé l’image, nous convertissons l’image en matrice pour effectuer des opérations plus complexes.

Utilisez la bibliothèque numpy et la bibliothèque scipy en python pour effectuer diverses opérations sur les données et calculs scientifiques. Nous pouvons installer ces deux bibliothèques directement via pip

pip install numpy
pip install scipy
Copier après la connexion

À l'avenir, nous devrons importer ces packages chaque fois que nous effectuerons un traitement d'images numériques en python :

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
Copier après la connexion

Ouvrez l'image et convertissez-la en matrice, et affichez :

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open(&#39;d:/lena.jpg&#39;)) #打开图像并转化为数字矩阵
plt.figure("dog")
plt.imshow(img)
plt.axis(&#39;off&#39;)
plt.show()
Copier après la connexion

Appelez la fonction array() dans numpy pour convertir l'objet PIL en objet tableau.

Pour afficher les informations sur l'image, vous pouvez utiliser la méthode suivante :

print img.shape 
print img.dtype 
print img.size 
print type(img)
Copier après la connexion

S'il s'agit d'une image RVB, après l'avoir convertie à un tableau, il devient une matrice tridimensionnelle de lignes*cols*canaux, nous pouvons donc utiliser img[i,j,k] pour accéder à la valeur du pixel.

Exemple 1 : Ouvrez l'image et ajoutez aléatoirement du bruit de sel et de poivre

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open(&#39;d:/ex.jpg&#39;))

#随机生成5000个椒盐
rows,cols,dims=img.shape
for i in range(5000):
  x=np.random.randint(0,rows)
  y=np.random.randint(0,cols)
  img[x,y,:]=255
  
plt.figure("beauty")
plt.imshow(img)
plt.axis(&#39;off&#39;)
plt.show()
Copier après la connexion

Exemple 2 : Binarisez l'image lena, et la valeur de pixel supérieure à 128 devient 1, sinon elle devient 0

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open(&#39;d:/pic/lena.jpg&#39;).convert(&#39;L&#39;))

rows,cols=img.shape
for i in range(rows):
  for j in range(cols):
    if (img[i,j]<=128):
      img[i,j]=0
    else:
      img[i,j]=1
      
plt.figure("lena")
plt.imshow(img,cmap=&#39;gray&#39;)
plt.axis(&#39;off&#39;)
plt.show()
Copier après la connexion

Si vous souhaitez opérer sur plusieurs pixels, vous pouvez utiliser le découpage de tableau pour y accéder. La méthode de découpage renvoie les valeurs de pixels du tableau consulté à des intervalles spécifiés. Voici quelques exemples d'images en niveaux de gris :

img[i,:] = im[j,:] # 将第 j 行的数值赋值给第 i 行
img[:,i] = 100 # 将第 i 列的所有数值设为 100
img[:100,:50].sum() # 计算前 100 行、前 50 列所有数值的和
img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)
img[i].mean() # 第 i 行所有数值的平均值
img[:,-1] # 最后一列
img[-2,:] (or im[-2]) # 倒数第二行
Copier après la connexion

Recommandations associées :


Traitement Python Excel xlrd Introduction à la méthode


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal