Cet article présente principalement des informations pertinentes sur la transformation des niveaux de gris de l'image Pythonet le fonctionnement de l'imagetableau Les amis dans le besoin peuvent se référer à
utilisation de python et numpy Complétez une série. de traitement d'images de base en exploitant directement des tableaux d'images
Introduction à numpy :
NumPy est une très célèbre boîte à outils de calcul scientifique Python, qui contient un un grand nombre d'outils utiles, tels que des tableaux objets (utilisés pour représenter des vecteurs, des matrices, des images, etc.) et des fonctions d'algèbre linéaire.
Les objets tableau peuvent implémenter des opérations importantes dans les tableaux, telles que les produits matriciels, les transpositions, la résolution de systèmes d'équations, les produits vectoriels et la normalisation. Cela constitue la base de la déformation de l'image, des modifications de modélisation, de la classification des images, du regroupement d'images, etc.
Dans l'article précédent sur les opérations de base sur les images Python, lors du chargement d'une image, l'image est convertie en un objet tableau NumPy en appelant la méthode array(). Les objets tableau dans NumPy sont multidimensionnels et peuvent être utilisés pour représenter des vecteurs, des matrices et des images. De nombreux traitements d’images peuvent être effectués en opérant directement sur des tableaux d’images.
Il existe de nombreuses informations sur numpy sur Internet. En tant que base du calcul scientifique python, cela vaut la peine d'être étudié sérieusement.
Utiliser des tableaux d'images pour les opérations de base sur les images :
Comprendre les tableaux d'images :
Grâce aux programmes suivants, nous examinons également les tableaux d'images d'images et d'images en niveaux de gris. comme numpy Une tranche d'un tableau.
# -*- coding: utf-8 -*- from PIL import Image from pylab import * #读取图片并转为数组 im = array(Image.open("./source/test.jpg")) #输出数组的各维度长度以及类型 print im.shape,im.dtype #输出位于坐标100,100,颜色通道为r的像素值 print im[100,100,0] #输出坐标100,100的rgb值 print im[100,100]及类型 print im.shape,im.dtype
Résultat d'exécution :
(600, 500, 3) uint8
64
[ 64 117 195]
Ce que nous voyons est un tableau tridimensionnel, représentant respectivement l'abscisse, l'ordonnée et le canal de couleur.
Nous pouvons échanger les canaux rouge et bleu via le tableau
# -*- coding: utf-8 -*- from PIL import Image from pylab import * #读取图片并转为数组 im = array(Image.open("./source/test.jpg")) #红色通道 r = im[:,:,0] #交换红蓝通道并显示 im[:,:,0] = im[:,:,2] im[:,:,2] = r imshow(im) show()
La méthode de découpage du tableau numpy est utilisé ici, il y a beaucoup d'informations sur numpy sur Internet, donc je n'entrerai pas dans les détails.
Résultat d'exécution :
Pendant le processus de conversion en tableau, nous pouvons définir le type de données et l'image en niveaux de gris. sont également significatifs :
# -*- coding: utf-8 -*- from PIL import Image from pylab import * #读取图片,灰度化,并转为数组 im = array(Image.open("./source/test.jpg").convert('L'),'f') #输出数组的各维度长度以及类型 print im.shape,im.dtype #输出坐标100,100的值 print im[100,100]
Résultats en cours d'exécution :
(600, 500) float32
110.0
Le paramètre supplémentaire 'f' convertit le type de données du tableau en un nombre à virgule flottante
Étant donné que l'image en niveaux de gris n'a aucune information de couleur, le tuple de forme a seulement deux L'opération inverse de la transformation numérique
*array() peut être complétée en utilisant fromarray() de PIL, comme im = Image.fromarray(im)
Une application simple de tableau d'images - transformation en niveaux de gris :
Image en niveaux de gris :
Une image numérique en niveaux de gris est une image avec une seule couleur échantillonnée par pixel. Ces images apparaissent généralement sous forme d’échelles de gris allant du noir le plus foncé au blanc le plus clair.
Vous pouvez convertir l'image en niveaux de gris via les méthodes suivantes :
1. Algorithme à virgule flottante : Gray=R*0.3 G*0.59 B*0.11
2 .Integer méthode : Gray=(R*30 G*59 B*11)/100
3. Méthode Shift : Gray =(R*76 G*151 B*28)>>8;
4. Méthode moyenne : Gray=(R G B)/3;5. Ne prenez que le vert : Gray=G Obtenu par l'une des méthodes ci-dessus Après Gray, remplacez le R, G, B dans le RVB d'origine (R, V, B) avec Gris pour former une nouvelle couleur RVB (Gris, Gris, Gris), et utilisez-la pour remplacer le RVB d'origine (R, V, B). C'est une échelle de gris image. Il a été utilisé plusieurs fois auparavant. En utilisant python, vous pouvez obtenir l'image en niveaux de gris en utilisant convert('L')Transformation en niveaux de gris :
Après avoir lu les images dans des objets du tableau NumPy, nous pouvons effectuer des opérations mathématiques arbitraires sur elles. Un exemple simple est la transformation en niveaux de gris d'une image. C'est-à-dire toute fonction f, qui mappe l'intervalle 0...255 (ou l'intervalle 0...1) sur elle-même. Il existe quelques transformations simples en niveaux de gris dans le programme suivant :#-*- coding: utf-8 -*- from PIL import Image from pylab import * #读取图片,灰度化,并转为数组 im = array(Image.open("./source/test.jpg").convert('L')) im2 = 255 - im # 对图像进行反相处理 im3 = (100.0/255) * im + 100 # 将图像像素值变换到 100...200 区间 im4 = 255.0 * (im/255.0)**2 # 对图像像素值求平方后得到的图像(二次函数变换,使较暗的像素值变得更小) #2x2显示结果 使用第一个显示原灰度图 subplot(221) title('f(x) = x') gray() imshow(im) #2x2显示结果 使用第二个显示反相图 subplot(222) title('f(x) = 255 - x') gray() imshow(im2) #2x2显示结果 使用第三个显示100-200图 subplot(223) title('f(x) = (100/255)*x + 100') gray() imshow(im3) #2x2显示结果 使用第四个显示二次函数变换图 subplot(224) title('f(x) =255 *(x/255)^2') gray() imshow(im4) #输出图中的最大和最小像素值 print int(im.min()),int(im.max()) print int(im2.min()),int(im2.max()) print int(im3.min()),int(im3.max()) print int(im4.min()),int(im4.max()) show()
0 255
100 200
0 255
Conclusion :
Ce blog présente le processus d'utilisation de tableaux d'images pour effectuer des opérations sur les images en python, y compris plusieurs exemples simples, grâce aux tableaux, nous pouvons effectuer toutes les opérations mathématiques sur les images, qui constituent la base de la déformation des images, de la classification des images, du regroupement d'images, etc., j'espère que mon blog sera utile à tout le monde~
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!