Conseils aux débutants 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.
Continuons avec Normalized Cut comme exemple.
Envisagez de traiter cet exemple pour différentes images. Tout d'abord, cet exemple est montré tel quel.
.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()
Si vous souhaitez traiter ce processus pour diverses images d'entrée, Pensez à ce qu'il faut saisir, à ce qu'il faut faire et à ce qu'il faut retourner. Pour le moment, faisons de la partie à traiter pour l'image img une fonction. Traduction japonaise de la documentation standard Python 4.6. Définition des fonctions
Un exemple après fonctionnalisation
.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)
Et ça? Pour la fonctionnalisation def nom de la fonction (argument): Code en retrait
Si vous écrivez comme, vous pouvez en faire une fonction pour le moment. Le fait que l'indentation fasse partie de la syntaxe de contrôle peut être déroutant pour un débutant complet en Python. Vous n'avez pas besoin d'écrire une valeur de retour de retour, sauf si vous renvoyez une valeur. ,
Script après réécriture
.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)
L'instruction for est une syntaxe de contrôle pour traiter des données telles que des listes une par une.
python
for name in names:
print name
Etc. Veuillez consulter la bibliothèque suivante pour plus de détails. Bibliothèque standard Python 4.2. Pour instruction
Bibliothèque standard Python glob - Extension de modèle de chemin d'accès de style Unix
Puisque la fonction est définie avec def plotNcut (img):, la description dans l'instruction for est simple. cv2.waitKey (100) donne un temps d'attente pour rendre l'affichage plus facile à voir.
768x576.avi sont les données vidéo incluses dans la distribution d'OpenCV. Exécutons la coupe normalisée en utilisant cette vidéo. OpenCV-Python a cv2.VideoCapture (), qui peut extraire l'image de chaque image de la vidéo. (Si vous donnez le numéro de la caméra comme argument, vous pouvez importer des images depuis la caméra USB.)
Tout d'abord, vérifions si la lecture vidéo est faite avec un script existant. Tutoriels OpenCV Premiers pas avec les vidéos Si vous essayez ceci et que la vidéo ne joue pas, il est probable que cap.isOpend () soit False depuis le début. Une situation courante est que l'interpréteur python n'a pas trouvé de DLL telle que opencv_ffmpeg2411.dll.
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.
Il y en a, alors veuillez vérifier la solution sur le Web. (Si vous utilisez OpenCV 2.4.11, openCV 2.4.11 cv2.pyd dans (répertoire Python) / Lib / site-packages / Remplacer par. Copiez également opencv_ffmpeg2411.dll et collez-le à l'emplacement du script afin que ffmpeg ait un chemin. )
Script après réécriture
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
Remarquez la partie liée à la variable cap définie par cap = cv2.VideoCapture (nom). Les méthodes de isOpened () et read () sont OpenCV-Python Tutorials Getting Started with Videos Comme il est écrit dans l'exemple de.
Un exemple d'image d'entrée et d'image de résultat
Défi: Opérateurs Edge en utilisant cv2.VideoCapture () Écrivons un programme qui traite l'exemple de.
En plus de glob.glob (modèle de fichier), il existe os.walk () pour trouver le fichier à traiter. Vous pouvez rechercher des fichiers tout en déplaçant des répertoires dans une structure de répertoires hiérarchique. (C'est une fonctionnalité que j'utilise souvent) os.walk(top, topdown=True, onerror=None, followlinks=False) Bibliothèque standard Python os - interfaces de système d'exploitation diverses
Un autre modèle de traitement de plusieurs fichiers consiste à traiter à partir de la liste de fichiers. Selon le processus, il peut être nécessaire de sélectionner le fichier avec un nombre aléatoire. Dans l'exemple suivant, mélangez les lignes de la liste de fichiers et sélectionnez-en seulement 100 lignes. Peut être traité.
python
lines = open("filelist.txt", "rt").readlines()
random.shuffle(lines)
for line in lines[:100]:
p = line.strip()
print p
Astuce 3 Écrire dans un fichier
Pour Python 3.4 ou version ultérieure, vous devez supprimer os.path et utiliser pathlib
Recommended Posts