Traitement d'images Python un : lecture, affichage et stockage d'images

Lecture, affichage et stockage d'images

skimage fournit le module io pour effectuer des opérations d'entrée et de sortie sur les images. Pour la commodité de la pratique, un module de données est également fourni, qui contient des exemples d'images, que nous pouvons utiliser directement.

Le module d'importation de skimage est disponible :

from skimage import io

1. Lisez l'image de l'extérieur et affichez-la

Utilisez la fonction skimage.io.imread(fname) avec un paramètre indiquant le chemin du fichier à lire. Pour afficher une image, utilisez la fonction skimage.io.imshow(arr) avec un paramètre indiquant le tableau arr à afficher (l'image lue est calculée sous la forme d'un tableau numpy). exemple:

from skimage import io
img=io.imread('D:/lena.bmp')
io.imshow(img)

2. Le programme est livré avec des images

Le programme skimage est livré avec quelques exemples d'images. Si nous ne voulons pas lire les images de l'extérieur, nous pouvons utiliser directement ces exemples d'images :

Astronaute astronaute image
café tasse de café image
appareil photo personne tenant un appareil photo image
pièces pièce de monnaie image
lune lune image
damier damier image
cheval cheval image
page livre page image
chelsea chaton image
hubble_deep_field ciel étoilé image
texte texte image
horloge horloge image

Pour afficher ces images, le code suivant peut être utilisé sans aucun paramètre

from skimage import io,data
img=data.coffee()
io.imshow(img)

Le nom de l'image correspond au nom de la fonction. Par exemple, le nom de la fonction correspondant à l'image du café est coffee(). Ces exemples d'images sont stockés dans le répertoire d'installation de skimage, et le nom du chemin est data_dir. Nous pouvons imprimer ce chemin pour voir :

from skimage import data_dir
print(data_dir)

montrer:
aaa

Autrement dit, les deux lignes de code suivantes pour lire une image ont le même effet :

from skimage import data_dir,data,io
img1=data.coffee() 
img2=io.imread(data_dir+'/coffee.png')  

3. Enregistrez l'image

Utilisez la fonction imsave(fname, arr) du module io à réaliser. Le premier paramètre indique le chemin et le nom enregistrés, et le deuxième paramètre indique la variable tableau à enregistrer. exemple:

from skimage import io,data
img=data.chelsea()
io.imshow(img)
io.imsave('d:/cat.jpg',img)

Lors de l'enregistrement de l'image, il joue également le rôle de conversion du format. Si le format d'image est une image jpg lors de la lecture et de l'enregistrement au format png, l'image est convertie d'une image jpg en une image png et enregistrée.

4. Informations sur les images

如果想知道图像信息,可以直接打印输出,代码如下:
from skimage import io,data
img=data.chelsea()
io.imshow(img)
print(type(img))  #显示类型
print(img.shape)  #显示尺寸
print(img.shape[0])  #图像宽度
print(img.shape[1])  #图像高度
print(img.shape[2])  #图像通道数
print(img.size)   #显示总像素个数
print(img.max())  #最大像素值
print(img.min())  #最小像素值
print(img.mean()) #像素平均值

5. Dessin d'images

matplotlib est une bibliothèque de dessin professionnelle, vous pouvez définir plusieurs fenêtres de figure, définir le titre de la figure, masquer la règle de coordonnées et même utiliser une sous-intrigue pour afficher plusieurs images dans une figure. Généralement, nous pouvons importer la bibliothèque matplotlib comme ceci :
import matplotlib.pyplot as plt
C'est-à-dire que nous utilisons en fait le module pyplot du package matplotlib pour le dessin. En fait, nous avons déjà utilisé le dessin d'image auparavant, tel que :

io.imshow(img)  

L'essence de cette ligne de code est d'utiliser le package matplotlib pour dessiner l'image et de renvoyer un type de données matplotlib une fois le dessin réussi. Par conséquent, nous pouvons également écrire :

import matplotlib.pyplot as plt
plt.imshow(img)

Le format de la fonction imshow() est :
matplotlib.pyplot.imshow(X, cmap=None)
X : l'image ou le tableau à dessiner.
cmap : carte de couleurs (colormap), dessinée dans l'espace colorimétrique RVB(A) par défaut.
Les autres cartes de couleurs facultatives sont les suivantes :

spectre de couleurs décrire
automne rouge-orange-jaune
os noir-blanc, radiographie
cool Cyan Magenta
cuivre cuivre noir
drapeau rouge-blanc-bleu-noir
gris noir blanc
chaud noir-rouge-jaune-blanc
hsv Espace colorimétrique HSV, rouge-jaune-vert-cyan-bleu-magenta-rouge
enfer noir-rouge-jaune
jet bleu-cyan-jaune-rouge
magma noir-rouge-blanc
rose noir-rose-blanc
plasma vert-rouge-jaune
prisme Mode rouge-jaune-vert-bleu-violet-…-vert
printemps magenta-jaune
été vert jaune
viridis bleu-vert-jaune
hiver bleu vert

Le gris, le jet, etc. sont largement utilisés, tels que :

plt.imshow(image,plt.cm.gray)
plt.imshow(img,cmap=plt.cm.jet)

Après avoir dessiné l'image sur la fenêtre, renvoyez un objet AxesImage. Pour afficher cet objet sur la fenêtre, nous pouvons appeler la fonction show() pour l'afficher.

from skimage import io,data
img=data.astronaut()
dst=io.imshow(img)
print(type(dst))
io.show()

Pour afficher une image, on peut aussi écrire :

import matplotlib.pyplot as plt
from skimage import io,data
img=data.astronaut()
plt.imshow(img)
plt.show()

Méthodes pour créer des fenêtres et diviser des sous-graphes :

1. Utilisez la fonction de figure et la fonction de sous-parcelle pour créer respectivement la fenêtre principale et la sous-parcelle

Exemple : Séparez et affichez simultanément trois canaux d'images d'astronautes

from skimage import data
import matplotlib.pyplot as plt
img=data.astronaut()
plt.figure(num='astronaut',figsize=(8,8))  #创建一个名为astronaut的窗口,并设置大小 
plt.subplot(4,1,1)     #将窗口分为两行两列四个子图,则可显示四幅图像
plt.title('origin image')   #第一幅图像标题
plt.imshow(img)      #绘制第一幅图像

plt.subplot(4,1,2)     #第二个子图
plt.title('R channel')   #第二幅图像标题
plt.imshow(img[:,:,0],plt.cm.gray)      #绘制第二幅图像,且为灰度图
plt.axis('off')     #不显示坐标尺寸

plt.subplot(4,1,3)     #第三个子图
plt.title('G channel')   #第三幅图像标题
plt.imshow(img[:,:,1],plt.cm.gray)      #绘制第三幅图像,且为灰度图
plt.axis('off')     #不显示坐标尺寸

plt.subplot(4,1,4)     #第四个子图
plt.title('B channel')   #第四幅图像标题
plt.imshow(img[:,:,2],plt.cm.gray)      #绘制第四幅图像,且为灰度图
plt.axis('on')     #显示坐标尺寸

plt.show()   #显示窗口

Dans le processus de dessin d'image, nous utilisons la fonction figure() sous le module matplotlib.pyplot pour créer une fenêtre d'affichage. Le format de cette fonction est :

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)

Tous les paramètres sont facultatifs et ont des valeurs par défaut, donc cette fonction peut être appelée sans aucun paramètre, parmi eux :
num : soit un entier, soit un type de caractère. S'il est défini sur un nombre entier, le nombre entier représente le numéro de série de la fenêtre. Si défini sur String, la chaîne représente le nom de la fenêtre. Utilisez ce paramètre pour nommer la fenêtre. Si deux fenêtres ont le même numéro de série ou le même nom, la dernière fenêtre couvrira la première.

figsize : définit la taille de la fenêtre. C'est un entier de type tuple, tel que figsize=(8, 8)
dpi : Nombre entier, indiquant la résolution de la fenêtre.
facecolor : La couleur de fond de la fenêtre.
edgecolor : La couleur de la bordure de la fenêtre.
La fenêtre créée avec la fonction figure() ne peut afficher qu'une seule image. Si vous souhaitez afficher plusieurs images, vous devez diviser la fenêtre en plusieurs sous-figures et afficher des images différentes dans chaque sous-figure. Nous pouvons utiliser la fonction subplot() pour diviser la sous-parcelle, le format de la fonction est :
matplotlib.pyplot.subplot(nrows, ncols, plot_number)
nrows : le nombre de lignes de la sous-parcelle.
ncols : le nombre de colonnes de la sous-parcelle.
plot_number : le numéro de la sous-parcelle actuelle.
comme:

plt.subplot(2,2,1)#则表示将figure窗口划分成了2行2列共4个子图,当前为第1个子图。我们有时也可以用这种写法:
plt.subplot(221)#两种写法效果是一样的。
#每个子图的标题可用title()函数来设置,是否使用坐标尺可用axis()函数来设置,如:
plt.subplot(221)
plt.title("first subwindow")
plt.axis('off')   

2. Utilisez des sous-parcelles pour créer des fenêtres d'affichage et diviser des sous-graphiques

Il existe une autre méthode d'écriture qui peut également diviser des sous-graphes, par exemple :

import matplotlib.pyplot as plt
from skimage import data,color

img = data.coffee()

fig, axes = plt.subplots(2, 2, figsize=(7, 6))
ax0, ax1, ax2, ax3 = axes.ravel()

ax0.imshow(img)
ax0.set_title('Origin image')

ax1.imshow(img[:, :, 0], cmap=plt.cm.gray)
ax1.set_title('R channel')

ax2.imshow(img[:, :, 1], cmap=plt.cm.gray)
ax2.set_title('G channel')

ax3.imshow(img[:, :, 2], cmap=plt.cm.gray)
ax3.set_title('B channel')

for ax in axes.ravel():
    ax.axis('off')

fig.tight_layout()  #自动调整subplot间的参数

Utilisez directement la fonction subplots() pour créer et diviser des fenêtres. Notez qu'il y a un s de plus que la fonction subplot() précédente, et le format de cette fonction est :

matplotlib.pyplot.subplots(nrows=1, ncols=1)
nrows : le nombre de lignes de toutes les sous-parcelles, la valeur par défaut est 1.
ncols : nombre de colonnes dans toutes les sous-parcelles, la valeur par défaut est 1.

Renvoie une figure de fenêtre et un objet ax de type tuple, qui contient toutes les sous-figures, qui peuvent être combinées avec la fonction ravel() pour lister toutes les sous-figures, telles que :

fig, axes = plt.subplots(2, 2, figsize=(7, 6))
ax0, ax1, ax2, ax3 = axes.ravel()
# 创建了2行2列4个子图,分别取名为ax0,ax1,ax2和ax3, 每个子图的标题用set_title()函数来设置,如:
ax0.imshow(img)
ax0.set_title("Original image")
# 如果有多个子图,我们还可以使用tight_layout()函数来调整显示的布局,该函数格式为:
matplotlib.pyplot.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)
# 所有的参数都是可选的,调用该函数时可省略所有的参数。
pad: 主窗口边缘和子图边缘间的间距,默认为1.08
h_pad, w_pad: 子图边缘之间的间距,默认为 pad
rect: 一个矩形区域,如果设置这个值,则将所有的子图调整到这个矩形区域内。
# 一般调用为:
plt.tight_layout()  #自动调整subplot间的参数

En résumé, les fonctions couramment utilisées pour dessiner et afficher des images sont :

Nom de la fonction Fonction format d'appel
chiffre Créer une vitrine plt.figure(num=1,figsize=(8,8)
imshow dessiner une image plt.imshow(image)
montrer fenêtre d'affichage plt.show()
sous-parcelle Sous-graphe de partition plt.subplot(2,2,1)
titre Définir le titre de la sous-parcelle (utilisé conjointement avec la sous-parcelle) plt.title('image d'origine')
axe Afficher ou non la règle de coordonnées plt.axis('off')
sous-parcelles Créer une fenêtre avec plusieurs sous-parcelles fig,axes=plt.subplots(2,2,figsize=(8,8))
effilochage définir des variables pour chaque sous-parcelle ax0,ax1,ax2,ax3=axes.ravel()
set_title Définir le titre de la sous-parcelle (utilisé conjointement avec les axes) ax0.set_title('première fenêtre')
mise en page_serrée Ajuster automatiquement la disposition d'affichage des sous-parcelles plt.tight_layout()

Je suppose que tu aimes

Origine blog.csdn.net/weixin_52051554/article/details/127358856
conseillé
Classement