Conseils pour les débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes
Ensuite, j'écrirai le contenu pour que les débutants en Python puissent jouer avec l'exemple de Scikit-image avec une légère modification.
Continuez vers Coupe normalisée
Sera à l'ordre du jour.
Dans [Astuces 2 pour les débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes, en traitant plusieurs fichiers], nous avons pu traiter diverses images.
Cependant, vous pouvez être insatisfait car les résultats ne peuvent pas être enregistrés dans le fichier tels quels.
Je voudrais donc vous donner quelques conseils pour enregistrer dans un fichier.
cv2.imwrite("out.png ", img) OpenCV-Python Tutorials >> Getting Started with Images
python
for i in range(len(names)):
img = cv2.imread(names[i])
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
oname = "gray_%04d.png " % i
cv2.imwrite(oname, gray)
La fonction équivalente au formatage de prinft () / sprinft () / fprintf () en langage C est Opération de formatage de chaîne / bibliothèque standard Python C'est dedans.
os.path.dirname() os.path.basename() os.path.splitext() os.path.join()
Bibliothèque standard Python / os.path - opération de nom de chemin commun
Si le répertoire de destination de sortie odir n'existe pas Il est courant de créer un répertoire comme suit:
python
if not os.path.isdir(odir):
os.makedirs(odir)
Bibliothèque standard Python / os - interface de système d'exploitation divers
os.makedirs (chemin [, mode]) Fonction de création de répertoire récursive. Similaire à mkdir (), mais crée tous les répertoires intermédiaires nécessaires pour créer le répertoire feuille.
oname = os.path.join(odir, "img_%05d.png " % i) Si vous incluez le répertoire de sortie dans le nom du fichier de sortie comme Vous pouvez générer une sortie dans un répertoire autre que le répertoire d'exécution du script.
Le nom du fichier de sortie peut également être généré à partir du nom du fichier d'entrée par la fonction de remplacement. La chaîne a une méthode replace () qui renvoie la chaîne remplacée en tant que valeur de retour. replace(old, new[, count]) Bibliothèque standard Python / méthodes de chaîne
Vous pouvez utiliser ces fonctions pour définir librement le nom du fichier de destination de sortie.
"Astuce: Traitons plusieurs fichiers en utilisant for name dans glob.glob (" * .jpg "):" Essayons d'enregistrer le résultat dans un fichier basé sur l'exemple illustré dans. Condition: Créez un répertoire de destination de sortie "out" et enregistrez-y le fichier. Condition: Pour l'entrée "image.jpg ", enregistrez-la sous le nom de fichier "out / image_ncut.png ".
Vous devriez être capable de coder avec les conseils donnés jusqu'à présent. Profitez des bibliothèques OpenCV-Python, scikit-image et scikit-learn, même si vous êtes nouveau dans Python.
-Lors de l'écriture d'un délimiteur de répertoire en Python, vous pouvez utiliser le caractère "/" comme "abc / def.txt" même sous Windows. -Si vous souhaitez utiliser le délimiteur avec "", il est pratique d'ajouter le symbole r avant "" comme name = r "abc \ def.txt". Dans ce cas, vous n'avez pas besoin d'écrire name = "abc \\ def.txt" (deux caractères "" sont écrits).
https://docs.python.jp/3/library/pathlib.html Semble être meilleur à utiliser.
python
# -*- coding: utf-8 -*-
# pylint: disable=C0103
import pathlib
from skimage import io, segmentation, color
from skimage.future import graph
def plotNcut(img):
"""
img: color img
"""
labels1 = segmentation.slic(img, compactness=30, n_segments=400)
g = graph.rag_mean_color(img, labels1, mode='similarity')
labels2 = graph.cut_normalized(labels1, g)
return color.label2rgb(labels2, img, kind='avg'), labels2
if __name__ == "__main__":
oDir = pathlib.Path("out")
if not oDir.is_dir():
oDir.mkdir()
for p in pathlib.Path("../images").glob("*.png "):
print(p)
oname = oDir.joinpath(p.with_suffix(".jpg ").name)
img = io.imread(p)
out, _ = plotNcut(img)
io.imsave(str(oname), out)
print(oname)