Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Bild-Graustufentransformations- und Bild-Array-Operationsmethoden

Python-Bild-Graustufentransformations- und Bild-Array-Operationsmethoden

高洛峰
高洛峰Original
2017-03-13 18:14:492202Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zur PythonBild-Graustufentransformation und zum BildArray vorgestellt. Freunde in Not können sich auf

Verwenden von Python und Numpy beziehen der grundlegenden Bildverarbeitung durch direktes Betreiben von Bildarrays

Einführung in Numpy:

NumPy ist ein sehr bekanntes Python-Toolkit für wissenschaftliches Rechnen, das Folgendes enthält: große Anzahl nützlicher Werkzeuge, wie ArrayObjekte (zur Darstellung von Vektoren, Matrizen, Bildern usw.) und lineare Algebra-Funktionen.

Array-Objekte können wichtige Operationen in Arrays implementieren, wie z. B. Matrixprodukte, Transponierungen, Lösen von Gleichungssystemen, Vektorprodukten und Normalisierung. Dies bildet die Grundlage für Bildverformung, Modellierungsänderungen, Bildklassifizierung, Bildclusterung usw.

Im vorherigen Artikel über grundlegende Python-Bildoperationen wird beim Laden eines Bildes das Bild in ein NumPy-Array-Objekt konvertiert, indem die Methode array() aufgerufen wird. Array-Objekte in NumPy sind mehrdimensional und können zur Darstellung von Vektoren, Matrizen und Bildern verwendet werden. Ein Großteil der Bildverarbeitung kann durch die direkte Bearbeitung von Bildarrays durchgeführt werden.

Es gibt viele Informationen über Numpy im Internet. Als Grundlage des wissenschaftlichen Rechnens mit Python lohnt es sich, es ernsthaft zu studieren.

Verwenden Sie Bildarrays für grundlegende Bildoperationen:

Bildarrays verstehen:

Mit den folgenden Programmen werfen wir einen Blick auf die Bildarrays von Bildern und Graustufenbildern as numpy Ein Ausschnitt eines Arrays.

# -*- 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


Laufergebnis:

(600, 500, 3) uint8
64
[ 64 117 195]

Was wir sehen, ist ein dreidimensionales Array, das jeweils die Abszisse, die Ordinate und den Farbkanal darstellt.

Wir können die roten und blauen Kanäle über das Array austauschen


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


Die Slicing-Methode des Numpy-Arrays wird hier verwendetEs gibt viele Informationen über Numpy im Internet, daher werde ich nicht auf Details eingehen.

Laufergebnis:

Python-Bild-Graustufentransformations- und Bild-Array-Operationsmethoden

Während des Konvertierungsprozesses in ein Array können wir den Datentyp und die Graustufenbild-Arrays festlegen sind auch sinnvoll:


# -*- 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]


Laufergebnisse:

(600, 500) float32
110,0

Der zusätzliche Parameter 'f' wandelt den Datentyp des Arrays in eine Gleitkommazahl um

Da das Graustufenbild keine Farbinformationen hat, hat das Formtupel diese Nur zwei Die entgegengesetzte Operation der numerischen

*array()-Transformation kann mit PILs fromarray() abgeschlossen werden, wie zum Beispiel im = Image.fromarray(im)

Eine einfache Anwendung eines Bildarrays - Graustufentransformation:

Graustufenbild:

Ein digitales Graustufenbild ist ein Bild mit nur einer abgetasteten Farbe pro Pixel. Solche Bilder erscheinen typischerweise als Graustufen, die vom dunkelsten Schwarz bis zum hellsten Weiß reichen.

Sie können das Bild mit den folgenden Methoden in Graustufen konvertieren:

1. Gleitkomma-Algorithmus: Grau=R*0,3+G*0,59+B*0,11

2 . Ganzzahlmethode: Gray=(R*30+G*59+B*11)/100

3. Shift-Methode: Gray =(R*76+G*151+B*28) >> ;8;

4. Durchschnittliche Methode: Gray=(R+G+B)/3;

5. Nehmen Sie nur Grün: Gray=G;

Nach Erhalt Ersetzen Sie Grau mit einer der oben genannten Methoden durch Grau, um R, G, B im ursprünglichen RGB (R, G, B) durch Grau zu ersetzen, um eine neue Farbe RGB (Grau, Grau, Grau) zu bilden. Es ersetzt das ursprüngliche RGB (R , G, B) mit einem Graustufenbild.

Es wurde schon oft verwendet. Mit Python können Sie das Graustufenbild erhalten, indem Sie „convert('L')“ verwenden.

Graustufentransformation:

Nachdem wir die Bilder in NumPy-Array-Objekte eingelesen haben, können wir beliebige mathematische Operationen an ihnen durchführen. Ein einfaches Beispiel ist die Graustufentransformation eines Bildes. Das heißt, jede Funktion f, die das Intervall 0...255 (oder das Intervall 0...1) auf sich selbst abbildet.

Es gibt einige einfache Graustufentransformationen im folgenden Programm:


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


Laufergebnisse:

Python-Bild-Graustufentransformations- und Bild-Array-Operationsmethoden

0 255
0 255
100 200
0 255

Sie können das Ergebnis der Graustufentransformation deutlich sehen Das zweite Bild wird umgekehrt angezeigt, die dunklen Teile des dritten Bildes werden aufgehellt und die hellen Teile werden abgedunkelt, wobei die Werte auf 100 bis 200 begrenzt sind, wobei das letzte Bild durch eine quadratische Funktion transformiert wird, um dunklere Pixel zu erzeugen Der Wert wird dunkler.

Fazit:

In diesem Blog wird der Prozess der Verwendung von Bildarrays zum Ausführen von Bildoperationen in Python vorgestellt, einschließlich einiger einfacher Beispiele. Mithilfe von Arrays können wir beliebige mathematische Operationen an Bildern ausführen, die die Grundlage für Bildverformung, Bildklassifizierung und Bildclusterung bilden. usw., ich hoffe, mein Blog wird für alle hilfreich sein~

Das obige ist der detaillierte Inhalt vonPython-Bild-Graustufentransformations- und Bild-Array-Operationsmethoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn