Jusqu'à présent, j'utilisais ImageJ, R, Matlab, etc. pour le traitement d'images, mais j'ai essayé quelque chose avec Python (+ OpenCV).
Comme la dépendance de la bibliothèque est gênante, j'apprécierai d'installer anaconda avec homebrew ici.
% brew cask install anaconda
Pour Windows, utilisez chocolatey pour faire choco installer anaconda3. Après avoir installé anaconda, installez OpenCV en utilisant le système d'emballage d'anaconda.
% conda install --channel https://conda.anaconda.org/menpo opencv3
Démarrez jupyter et vérifiez qu'OpenCV est installé.
jupyter est trop pratique. Je veux installer anaconda juste pour jupyter. Je veux l'utiliser avec perl et R.
La base de données est scott / tiger emp et l'image du visage humain est Lenna.
Tout d'abord, téléchargez l'image 4.2.04.tiff depuis SPI Image Database. En termes de droit d'auteur, il s'écrit "Scans d'images de magazines. Le droit d'auteur appartient à l'éditeur ou au photographe original." Si vous avez installé des outils de traitement d’image à l’avance, essayez de trouver / usr / local -name «Lenna.tiff» -type f -print, et il peut être enregistré dans un répertoire de manière inattendue.
Vous pouvez découvrir comment charger et afficher des images à l'aide d'OpenCV en consultant la Documentation OpenCV. C'est pourquoi je vais l'essayer sur le notebook Jupyter. En outre, cv2.waitKey (0) puis cv2.destroyAllWindows (), mais cela signifie attendre l'entrée de la clé pendant 0 millisecondes, et 0 seconde dans ce cas signifie "aucune heure spécifiée", c'est-à-dire "tout le temps" Cela semble signifier "attendre la prochaine entrée de clé". En d'autres termes, l'instruction de garder la fenêtre d'image ouverte jusqu'à ce qu'il y ait une entrée clé.
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()
Si vous voulez en savoir plus sur cette Lenna, regardez img.shape ou img.size.
Si vous regardez OpenCV Tutorial, vous trouverez le code pour la binarisation, alors faisons-le.
J'ai essayé de mettre une ligne pour vérifier s'il y a un fichier image en faisant os.path.exiss ().
De plus, comme dans le didacticiel, l'image est affichée à l'aide de matplotlib.
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()
De même, essayez la binarisation à l'aide de la méthode Otsu. Le code est pratiquement inchangé.
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()
C'est pourquoi j'ai pu faire les bases pour le moment.
Recommended Posts