Bisher habe ich ImageJ, R, Matlab usw. für die Bildverarbeitung verwendet, aber ich habe etwas mit Python (+ OpenCV) versucht.
Da die Abhängigkeit der Bibliothek problematisch ist, werde ich es genießen, hier Anaconda mit Homebrew zu installieren.
% brew cask install anaconda
Verwenden Sie unter Windows schokoladig, um anocoonda3 zu installieren. Installieren Sie OpenCV nach der Installation von anaconda mithilfe des Verpackungssystems von anaconda.
% conda install --channel https://conda.anaconda.org/menpo opencv3
Starten Sie jupyter und überprüfen Sie, ob OpenCV installiert ist.
Jupiter ist zu bequem. Ich möchte Anaconda nur für Jupiter installieren. Ich möchte es mit Perl und R verwenden.
Die Datenbank ist scott / tiger emp und das menschliche Gesichtsbild ist Lenna.
Laden Sie zunächst das Bild 4.2.04.tiff aus der [SPI-Bilddatenbank] herunter (http://sipi.usc.edu/database/database.php?volume=misc). In Bezug auf das Urheberrecht wird es als "Scans von Zeitschriftenbildern. Das Urheberrecht liegt beim ursprünglichen Verlag oder Fotografen" geschrieben. Wenn Sie Bildverarbeitungstools im Voraus installiert haben, versuchen Sie, den F-Druck vom Typ / usr / local -name "Lenna.tiff" zu finden. Dieser wird möglicherweise unerwartet in einem Verzeichnis gespeichert.
Informationen zum Laden und Anzeigen von Bildern mit OpenCV finden Sie in der OpenCV-Dokumentation. Deshalb werde ich es auf dem Jupyter-Notebook versuchen. Außerdem cv2.waitKey (0) und dann cv2.destroyAllWindows (). Dies bedeutet jedoch, dass auf die Schlüsseleingabe 0 Millisekunden gewartet wird. In diesem Fall ist 0 Sekunden "keine Zeit angegeben", dh "immer". Es scheint "auf die nächste Tasteneingabe warten" zu bedeuten. Mit anderen Worten, die Anweisung, das Bildfenster offen zu halten, bis eine Schlüsseleingabe erfolgt.
import numpy as np
import cv2
import os.path
lenna = "4.2.04.tiff"
if os.path.exists(lenna):
img = cv2.imread(lenna)
cv2.imshow("Lenna", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Wenn Sie mehr über diese Lenna erfahren möchten, schauen Sie sich img.shape oder img.size an.
Wenn Sie sich OpenCV Tutorial ansehen, finden Sie den Code für die Binärisierung.
Ich habe versucht, eine Zeile zu setzen, um zu überprüfen, ob eine Bilddatei vorhanden ist, indem ich os.path.exiss () ausgeführt habe.
Wie im Tutorial wird das Bild auch mit matplotlib angezeigt.
import cv2
import numpy as np
import os.path
from matplotlib import pyplot as plt
lenna = "4.2.04.tiff"
if os.path.exists(lenna):
img = cv2.imread(lenna,0)
img = cv2.medianBlur(img, 5)
ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THERSH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
titles = ['Original Image', 'Global Thresholding (v = 127)', 'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]
for i in range(0, 4):
plt.subplot(2, 2, i+1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
Versuchen Sie in ähnlicher Weise die Binärisierung mit der Otsu-Methode. Der Code ist nahezu unverändert.
import cv2
import numpy as np
import os.path
from matplotlib import pyplot as plt
lenna = "4.2.04.tiff"
if os.path.exists(lenna):
img = cv2.imread(lenna,0)
img = cv2.medianBlur(img,5)
ret,th = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("Lenna", th)
cv2.waitKey(0)
cv2.destroyAllWindows()
Deshalb konnte ich vorerst die Grundlagen machen.
Recommended Posts