Maison  >  Article  >  développement back-end  >  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

不言
不言original
2018-05-04 14:06:172461parcourir

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

À 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

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()

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)

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()

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()

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]) # 倒数第二行

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!

Déclaration:
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