Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden
Als nächstes werde ich den Inhalt für Python-Anfänger schreiben, um mit dem Beispiel von Scikit-image mit einer geringfügigen Änderung zu spielen.
Fahren wir als Beispiel mit Normalized Cut fort.
Verarbeiten Sie dieses Beispiel für verschiedene Bilder. Zunächst wird dieses Beispiel so gezeigt, wie es ist.
.py:plot_ncut.py
from skimage import data, io, segmentation, color
from skimage.future import graph
from matplotlib import pyplot as plt
img = data.coffee()
labels1 = segmentation.slic(img, compactness=30, n_segments=400)
out1 = color.label2rgb(labels1, img, kind='avg')
g = graph.rag_mean_color(img, labels1, mode='similarity')
labels2 = graph.cut_normalized(labels1, g)
out2 = color.label2rgb(labels2, img, kind='avg')
plt.figure()
io.imshow(out1)
plt.figure()
io.imshow(out2)
io.show()
Wenn Sie diesen Vorgang für verschiedene Eingabebilder verarbeiten möchten, Überlegen Sie, was Sie eingeben, was Sie tun und was Sie zurückgeben möchten. Lassen Sie uns vorerst das für das Bild zu verarbeitende Teil zu einer Funktion machen. Japanische Übersetzung der Python-Standarddokumentation 4.6. Funktionen definieren
Ein Beispiel nach der Funktionalisierung
.py:plot_ncut_ex1.py
from skimage import data, io, segmentation, color
from skimage.future import graph
from matplotlib import pyplot as plt
def plotNcut(img):
labels1 = segmentation.slic(img, compactness=30, n_segments=400)
out1 = color.label2rgb(labels1, img, kind='avg')
g = graph.rag_mean_color(img, labels1, mode='similarity')
labels2 = graph.cut_normalized(labels1, g)
out2 = color.label2rgb(labels2, img, kind='avg')
plt.figure()
io.imshow(out1)
plt.figure()
io.imshow(out2)
io.show()
img = data.coffee()
plotNcut(img)
Wie wär es damit? Zur Funktionalisierung def Funktionsname (Argument): Einrückter Code
Wenn Sie gerne schreiben, können Sie es vorerst zu einer Funktion machen. Die Tatsache, dass Einrückungen Teil der Steuerungssyntax sind, kann für einen Anfänger in Python verwirrend sein. Sie müssen keinen Rückgabewert schreiben, es sei denn, Sie geben einen Wert zurück. ,
Skript nach dem Umschreiben
.py:plot_ncut_ex2.py
from skimage import data, io, segmentation, color
from skimage.future import graph
from matplotlib import pyplot as plt
def plotNcut(img):
labels1 = segmentation.slic(img, compactness=30, n_segments=400)
out1 = color.label2rgb(labels1, img, kind='avg')
g = graph.rag_mean_color(img, labels1, mode='similarity')
labels2 = graph.cut_normalized(labels1, g)
out2 = color.label2rgb(labels2, img, kind='avg')
plt.figure(1)
io.imshow(out1)
plt.figure(2)
io.imshow(out2)
io.show()
import cv2
import glob
for name in glob.glob("*.png "):
img = cv2.imread(name)
plotNcut(img)
cv2.waitKey(100)
Die for-Anweisung ist eine Steuerungssyntax zum Verarbeiten von Daten wie Listen nacheinander.
python
for name in names:
print name
Und so weiter. Weitere Informationen finden Sie in der folgenden Bibliothek. Python-Standardbibliothek 4.2. Für Anweisung
Python-Standardbibliothek glob - Erweiterung des Pfadnamenmusters im Unix-Stil
Da die Funktion mit def plotNcut (img): definiert ist, ist die Beschreibung in der for-Anweisung einfach. cv2.waitKey (100) gibt eine Wartezeit an, damit die Anzeige besser sichtbar ist.
768x576.avi sind die Videodaten, die in der Distribution von OpenCV enthalten sind. Lassen Sie uns Normalized Cut mit diesem Video ausführen. OpenCV-Python verfügt über cv2.VideoCapture (), mit dem das Bild jedes Frames aus dem Video extrahiert werden kann. (Wenn Sie die Kameranummer als Argument angeben, können Sie Bilder von der USB-Kamera importieren.)
Lassen Sie uns zunächst überprüfen, ob die Videowiedergabe mit einem vorhandenen Skript erfolgt. OpenCV-Tutorials Erste Schritte mit Videos Wenn Sie dies versuchen und das Video nicht abgespielt wird, ist cap.isOpend () wahrscheinlich von Anfang an falsch. Eine häufige Situation ist, dass der Python-Interpreter keine DLL wie opencv_ffmpeg2411.dll gefunden hat.
Note Make sure proper versions of ffmpeg or gstreamer is installed. Sometimes, it is a headache to work with Video Capture mostly due to wrong installation of ffmpeg/gstreamer.
Es gibt also bitte überprüfen Sie die Lösung im Web. (Wenn Sie OpenCV 2.4.11 verwenden, öffnen Sie openCV 2.4.11 cv2.pyd in (Python-Verzeichnis) / Lib / site-packages / Ersetzen mit. Kopieren Sie außerdem opencv_ffmpeg2411.dll und fügen Sie es an der Position des Skripts ein, sodass ffmpeg einen Pfad hat. )
Skript nach dem Umschreiben
python
from skimage import data, io, segmentation, color
from skimage.future import graph
from matplotlib import pyplot as plt
import cv2
def plotNcut(img):
labels1 = segmentation.slic(img, compactness=30, n_segments=200)
out1 = color.label2rgb(labels1, img, kind='avg')
g = graph.rag_mean_color(img, labels1, mode='similarity')
labels2 = graph.cut_normalized(labels1, g)
out2 = color.label2rgb(labels2, img, kind='avg')
return out1, out2
name = "768x576.avi"
cap = cv2.VideoCapture(name)
i = -1
while cap.isOpened():
i += 1
ret, img = cap.read()
if i % 10 != 0:
continue
if ret != True:
break
[h, w] = img.shape[:2]
img = cv2.resize(img, (w/2, h/2))
out1, out2 = plotNcut(img)
cv2.imshow("img", out1)
cv2.waitKey(100)
print i
Beachten Sie den Teil, der sich auf die durch cap = cv2.VideoCapture (Name) festgelegte variable Obergrenze bezieht. Die Methoden von isOpened () und read () sind OpenCV-Python Tutorials Getting Started with Videos Wie es im Beispiel von geschrieben steht.
Ein Beispiel für ein Eingabebild und ein Ergebnisbild
Herausforderung: Edge-Operatoren mit cv2.VideoCapture () Schreiben wir ein Programm, das das Beispiel von verarbeitet.
Neben glob.glob (Dateimuster) ist os.walk () eine weitere Möglichkeit, die zu verarbeitende Datei zu finden. Sie können nach Dateien suchen, während Sie Verzeichnisse in einer hierarchischen Verzeichnisstruktur verschieben. (Dies ist eine Funktion, die ich oft benutze) os.walk(top, topdown=True, onerror=None, followlinks=False) Python-Standardbibliothek Betriebssystem - verschiedene Betriebssystemschnittstellen
Ein weiteres Muster für die Verarbeitung mehrerer Dateien ist die Verarbeitung aus der Dateiliste. Je nach Prozess kann es erforderlich sein, die Datei mit einer Zufallszahl auszuwählen. Mischen Sie im folgenden Beispiel Zeilen aus der Dateiliste und wählen Sie nur 100 Zeilen aus. Kann verarbeitet werden.
python
lines = open("filelist.txt", "rt").readlines()
random.shuffle(lines)
for line in lines[:100]:
p = line.strip()
print p
Wenn Sie Python 3.4 oder höher haben, sollten Sie os.path wegwerfen und pathlib verwenden
Recommended Posts