Python-Datenanalyse und -Mining - Bildverarbeitung

Verzeichnis der Serienartikel



Vorwort

Mit der heutigen Popularität von Big Data sind Datenverarbeitung und -analyse zu entscheidenden Aspekten geworden. 2 Was wir in diesem Abschnitt lernen werden, ist der Umgang mit Bildern. Verwenden Sie Code, um einige Bilder zu verarbeiten. und die Natur von Bildern zu erkennen.

Mosaik von Bildern

Wir alle wissen, dass wir im Leben manchmal versuchen, unsere Informationen nicht preiszugeben. Fotos verwenden manchmal Mosaike, um unsere grundlegenden Erscheinungsinformationen zu verbergen. Obwohl eine Menge Software auf Mobiltelefonen gestartet wurde, um die Mosaikverarbeitung von Bildern durchzuführen, sind die meisten Softwaremosaike bereits festgelegt und ihre Werte können nicht geändert werden. Und heute können wir das Matplotlib-Modul in Python verwenden, um das Bildmosaik zu realisieren.

1. Installieren Sie matplotlib, numpy und andere Module

Beim Schreiben von Python wird VS-Code von einigen Leuten verwendet, und es gibt auch einen Pycharm-Compiler. Der vs-Code-Compiler wird hier vorgestellt.
1. Drücken und halten Sie die Win+R-Taste, öffnen Sie das Bedienterminal und geben Sie den cmd-Befehl ein
Bildbeschreibung hier einfügen
2. Geben Sie den Befehl in der geöffneten Benutzeroberfläche ein pip install [模块],
Bildbeschreibung hier einfügen
geben Sie wie in der obigen Abbildung gezeigt das herunterzuladende Modul ein und die Modul kann nach erfolgreichem Download verwendet werden. Für Schüler, die den Pycharm-Compiler verwenden, öffnen Sie einfach das Pycharm-Terminal und geben Sie pip install [模块]
.
3. Verwendung des Moduls
Wir verwenden hauptsächlich das Bild in matplotlib, also importieren wir das Modul;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt

Nach dem Import des Moduls können wir das Bild bearbeiten.

2. Mosaikbilder

1. Bilder importieren

matplotlib.image中的imread()函数就是用来读取图片的编码的。我们可以提前将要使用的图片放在该目录下,也可直接导入,这里博主就使用上次爬虫得到的图片。具体的图片你自己根据自己的情况来定
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg') #导入图片,解码
Bildbeschreibung hier einfügen
Lassen Sie uns seinen Wert drucken, wir werden feststellen, dass das Bild nach der Dekodierung ein dreidimensionales Array ist. Und unsere Operationen an ihm sind alle Operationen an diesem Array.

2. Positionierungsbereich

Wir lokalisieren die Position, die mosaikiert werden muss. ( imshow()函数)
Bildbeschreibung hier einfügen
Wir werden feststellen, dass es Skalen um das importierte Bild herum gibt. Wir können die Position, an der wir kodieren möchten, anhand der Skalen darauf abschätzen. Nachdem Sie die Codierposition gefunden haben, schneiden Sie sie aus;
data1=data_jpg[50:320,150:350]
Bildbeschreibung hier einfügen
dann erhalten wir ein geschnittenes Bild. An diesem Bild führen wir nun eine feine Pixelsegmentierung durch.
data1=data1[::27,::40]Definieren Sie den Wert der Segmentierung nach Ihren eigenen Bedürfnissen, das bedeutet hier, dass die Pixel des Bildes in Abständen von 27 (y-Achse) und 40 (x-Achse) in einen Pixel aufgeteilt werden. Mosaik wird gebildet.
Bildbeschreibung hier einfügen

3. Synthese von Bildern

Kopieren Sie abschließend den oben mosaikierten Bildbereich in das Originalbild;

for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]

Zum Schluss zeigen Sie einfach das Bild an, wenn Sie es speichern müssen, verwenden Sie einfach die savefig()Funktion,
jetzt schauen wir uns den endgültigen Effekt an;
Bildbeschreibung hier einfügen
源代码展示;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
#plt.imshow(data_jpg)
#马赛克;
data2=data_jpg.copy()
data1=data_jpg[50:320,150:350]
#plt.imshow(data1)
data1=data1[::27,::40]
#plt.imshow(data1)
for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]
plt.imshow(data2)

Bild nähen

Die Verarbeitung von Python-Geschwaderbildern kann neben dem Mosaikieren auch Funktionen wie Verfärbung, Virtualisierung, Graubildverarbeitung, Bildzusammenfügung usw. ausführen.
concatenate()函数
Das Zusammenfügen von Bildern wird durch die Funktion concatenate() realisiert;
Bildbeschreibung hier einfügen

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
data3=np.concatenate([data_jpg,data_jpg],axis=1)
plt.imshow(data3)

Graustufenbild

1. max()-Methode

Wie oben erwähnt, ist die Zusammensetzung des Bildes ein dreidimensionales Array, und die Zahlen darin repräsentieren ihre Bildeigenschaften. Daher können die Graustufen des Bildes auch die Farbe und Form des Bildes ändern, indem sie ihre Position, ihren Wert und ihre Dimension
ändern.Wir können das folgende Beispiel sehen;

import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
print(data_jpg)
[[[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [202 187 180]]

 [[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [202 187 180]]

 [[215 221 211]
  [215 221 211]
  [215 221 211]
  ...
  [204 189 182]
  [203 188 181]
  [201 186 179]]

 ...
...
  ...
  [188 150 137]
  [189 151 138]
  [189 151 138]]]
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)#axis取-1就是为了得到最里面的值;
plt.imshow(s,cmap='gray') #cmap参数表示最后的颜色,gray时灰色;

Zeige Ergebnisse;
Bildbeschreibung hier einfügen

Two.min()-Methode

Ähnlich wie bei der Methode max(), daher gehe ich hier nicht zu sehr ins Detail, sondern füge den Code einfach direkt ein;

data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
sss=np.min(data_jpg,axis=-1)
plt.imshow(sss,cmap='gray')
3. Average-Methode mean()-Funktion
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)
plt.imshow(s,cmap='gray')

Der Effekt wird gezeigt,
Bildbeschreibung hier einfügen
der durch das obige Verfahren erzielte Effekt ist grundsätzlich ähnlich. Also, meistere einfach einen von ihnen.

4. Methode des gewichteten Durchschnitts

Anders als bei der Durchschnittsmethode kann die Methode des gewichteten Durchschnitts entsprechend den von ihr selbst gegebenen Daten abgeblendet werden;

data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
weight=[0.01,0.01,0.01]  #这里的值自己更改,值越大,灰度化颜色偏深,反之则偏浅.
ss=np.dot(data_jpg,weight)
plt.imshow(ss,cmap='gray')

Bildbeschreibung hier einfügen

Segmentierung von Bildern

Manchmal brauchen wir nur einen kleinen Teil des Bildes, dann können wir es tun, indem wir die Funktion teilen split();

one,data4,two=np.split(data_jpg,indices_or_sections=[100,400],axis=1) #中间的参数表示我们分割的区间;
plt.imshow(data4)
plt.imshow(one)
plt.imshow(two)

Zeige Ergebnisse;

Bildbeschreibung hier einfügen

Zusammenfassen

Das ist alles, was ich in diesem Abschnitt vorstellen werde. Es gibt viele Möglichkeiten, Bilder zu verarbeiten. Ich werde hier nicht zu viel vorstellen und sie später weiter aktualisieren. Die Verwendung von Code zur Verarbeitung von Bildern bietet viel flexiblen Nutzungsraum, der nicht auf die Einschränkungen von Mobiltelefonsoftware beschränkt ist, daher ist es auch sehr vorteilhaft, diese Methoden zu beherrschen.Der
Quellcode ist unten platziert, und interessierte Schüler können einen Blick darauf werfen.

Quellcode


import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data=mpimg.imread("./onetemp.jpg")
data1=data.copy()
#打马赛克;
#第一步,找出要打马赛克的位置;
data2=data1[200:900,100:800]
#第二步,将图片比例的收缩;
data2=data2[::35,::35]
print(data2.shape)
datatemp=data1.copy()
#第三步,替换,将现有的替换到原来的,记住两个尺寸不一样;
for i in range(20):
    for j in range(20):
        datatemp[200+35*i:200+35*i+35,100+35*j:100+35*j+35]=data2[i,j]
plt.imshow(datatemp)

#图片的拼接;
data4=np.concatenate([data,data])#axis=1时,并排着;
plt.imshow(data4)
data5=np.concatenate([data,data],axis=1)
plt.imshow(data5)
#图片切割;
one,two,three=np.split(data,indices_or_sections=[400,600],axis=1)
plt.imshow(one)
plt.imshow(two) 
plt.imshow(three)

#图像灰度化;
#第一种方法,最小值法;
data=mpimg.imread('./onetemp.jpg')
#data=np.min(data,axis=-1)
#plt.imshow(data,cmap='gray')
#第二种方法,最小值法;
data1=np.max(data,axis=-1)
#plt.imshow(data1,cmap='gray')
#第三种,平均值法;
data3=np.mean(data,axis=-1)#等价于data.mean()函数;
#plt.imshow(data3,cmap='gray')

#第四种方法,加权平均值法,dot函数;
weight=[0.299,0.345,0.456]
data6=np.dot(data,weight)
plt.imshow(data6,cmap='gray')


data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
print(data_jpg)
#plt.imshow(data_jpg)
#马赛克;
data2=data_jpg.copy()
data1=data_jpg[50:320,150:350]
#plt.imshow(data1)
data1=data1[::27,::40]
#plt.imshow(data1)
for i in range(10):
    for j in range(5):
        data2[50+27*i:50+27+27*i,150+40*j:150+40+40*j]=data1[i,j]
plt.imshow(data2)


#照片的合集;
import matplotlib.image as mpimg
import math
import numpy as np
import matplotlib.pyplot as plt
data_jpg=mpimg.imread('D:\CSDN图片\work.jpg')
data3=np.concatenate([data_jpg,data_jpg],axis=1)
plt.imshow(data3)

#图片的切割;
one,data4,two=np.split(data_jpg,indices_or_sections=[100,400],axis=1)
plt.imshow(data4)
#plt.imshow(one)
#plt.imshow(two)

#图像的灰度化;
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
#最大值法;
s=np.max(data_jpg,axis=-1)
plt.imshow(s,cmap='gray')
#加权平均值法;
data_jpg=mpimg.imread("D:\CSDN图片\work.jpg")
weight=[0.31,0.41,0.53]
ss=np.dot(data_jpg,weight)
plt.imshow(ss,cmap='gray')

#平均值法;
smp=np.mean(data_jpg,axis=-1)
plt.imshow(smp,cmap='gray')

#最小值法;
sss=np.min(data_jpg,axis=-1)
plt.imshow(sss,cmap='gray')


Ich denke du magst

Origin blog.csdn.net/qq_59931372/article/details/127470557
Empfohlen
Rangfolge