import cv2
import numpy as np
img = cv2.imread('stadio_folla2.jpg',1) # carica l'immagine
imgBN = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # converte l'immagine letta in una in scala di grigi...
template = cv2.imread('stadio_persona.jpg',01) # carica l'immagine del template
templateBN = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) # converte l'immagine letta in una in scala di grigi...
w, h = templateBN.shape [::-1] # ottiene informazioni sulla larghezza e sull'altezza del template
# Applica il template Matching (con il metodo TM_CCOEFF_NORMED)
res = cv2.matchTemplate(imgBN,templateBN,cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
print ("valore massimo del matching: "+str(max_val))
# Disegna un rettangolo intorno al template trovato
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img,top_left, bottom_right, [255,255,0], 2)
cv2.imshow("Immagine Originale",img)
cv2.imshow("template",template)
cv2.imshow("risultato matching",res)
k = cv2.waitKey(0) # attende che venga premuto un tasto
cv2.destroyAllWindows() # ...chiude tutte le finestre
giovedì 7 maggio 2015
Esercizio - 10 - Template Matching
Esercizio 6 - Apertura di un file video
In questo esempio vedremo come aprire e visualizzare un file video e come fare per applicare le nozioni fino qui apprese per l'elaborazione delle immagini; modificare questo esempio utilizzando le informazioni apprese precedentemente per i prossimi 3 esercizi:
Una prima modifica (miglioramento) a questo esempio di base consiste nel realizzare una "uscita pulita" dal programma: attualmente l'esecuzione viene interrotta da un messaggio di errore a fine file...
Un indizio: ret=True se l'acquisizione del frame è andata a buon fine, ret=False altrimenti...
- Esercizio 7: conversione in scala di grigi
- Esercizio 8: rilevamento della soglia
- Esercizio 9: color detection
Una prima modifica (miglioramento) a questo esempio di base consiste nel realizzare una "uscita pulita" dal programma: attualmente l'esecuzione viene interrotta da un messaggio di errore a fine file...
Un indizio: ret=True se l'acquisizione del frame è andata a buon fine, ret=False altrimenti...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import cv2
print ("Apertura del file video...")
cap = cv2.VideoCapture('tratto2.m4v')
if cap.isOpened()==False:
print ("ERRORE nell'apertura del file!")
print ("controlla meglio il nome del file")
print ("controlla il dispositivo...")
while(cap.isOpened()):
# cattura un frame dal flusso video e la memorizza in 'frame'
ret, frame = cap.read()
###############################################
# ... inserire qui eventuali elaborazioni ... #
###############################################
# visualizza il frame del video
cv2.imshow('frame',frame)
k=cv2.waitKey(33)
tasto=chr(k & 255)
if cv2.waitKey(1) & 0xFF == ord('q'): # se è stato premuto il tasto 'q'
break # allora esce dal ciclo di riproduzione
cap.release()
cv2.destroyAllWindows() # ...chiude tutte le finestre
lunedì 4 maggio 2015
Esercizio 5 - contorni
L'esercizio che segue utilizza la funzione cv2.Canny() per ottenere i contorni da un'immagine, occorre fornire in ingresso un'immagine in scala di grigi.
L'immagine prodotta sarà in bianco e nero.
Nella parte seguente del codice la funzione cv2.dilation() allarga le zone bianche utilizzando una matrice ausiliare come se fosse un "pennarello" con cui ripassare l'immagine...
L'immagine prodotta sarà in bianco e nero.
Nella parte seguente del codice la funzione cv2.dilation() allarga le zone bianche utilizzando una matrice ausiliare come se fosse un "pennarello" con cui ripassare l'immagine...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
import numpy as np
img = cv2.imread("test2.jpg",1) # legge una immagine da un file
cv2.imshow('Immagine caricata dal file.',img) # mostra l'immagine in una finestra
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # converte l'immagine caricata in una in scala di grigi...
# estrae i controni dall'immagine
edges = cv2.Canny(gray_image,100,200)
# ripassa le parti bianche inspessendole
kernel = np.ones((5,5),np.uint8) # matrice-"pennarello" con cui eseguire il ripasso...
dilation = cv2.dilate(edges,kernel,iterations = 1) # funzione di dilatazione
cv2.imshow('Controni',edges) # mostra i contorni in una finestra
cv2.imshow('Controni Allargati',dilation) # mostra il tratto inspessito
k = cv2.waitKey(0) # attende che venga premuto un tasto
cv2.destroyAllWindows() # ...chiude tutte le finestre
Esercizio 4 - Color detection
Questo esercizio ha lo scopo di individuare un colore prestabilito in una immagine e calcolarne il "centro", o più correttamente il "centroide".
Per compiere questa operazione si utilizza lo "spazio di colore HSV".
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# legge una immagine da un file
img = cv2.imread("tratto.jpg",1)
# Convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# definisce un intervallo di colore nello spazio HSV
verde_min = np.array([33,96,94],np.uint8) #############################
verde_max = np.array([87,255,255],np.uint8) #############################
# soglia che prende solo l'area compresa tra i due livelli di colore
mask = cv2.inRange(hsv, verde_min, verde_max)
# cerca il centro (centroide) dell'area evidenziata
M = cv2.moments(mask, 0)
cx,cy = int(M['m10']/M['m00']), int(M['m01']/M['m00'])
# disegna un cerchio:
# (immagine, centro, raggio, colore(BGR), spessore)
cv2.circle(img,(cx,cy),20,(0,0,255),2)
## Visualizza le immagini nelle varie finestre
cv2.imshow('Immagine caricata dal file...',img)
cv2.imshow('mask',mask)
# attende che venga premuto un tasto
k = cv2.waitKey(0)
# ...chiude tutte le finestre
cv2.destroyAllWindows()
Esercizio 3 - Soglia
In questo esercizio, introduciamo la funzione:
Le modalità di funzionamento possono essere:
Ecco il codice di esempio:
Per ulteriori approfondimenti rimando alla documentazione ufficiale
cv2.threshold(img , val_rif , val_assegnato , modalità)Il suo funzionamento è molto semplice: accetta, tra i parametri di input, l'immagine in scala di grigi da elaborare (
img) e genera in uscita una immagine i cui pixel possono assumere solo 2 valori: '0' se sono al di sotto di val_rif oppure val_assegnato per tutti i pixel dell'immagine originale che superano val_rif.Le modalità di funzionamento possono essere:
- cv2.THRESH_BINARY
- cv2.THRESH_BINARY_INV
- cv2.THRESH_TRUNC
- cv2.THRESH_TOZERO
- cv2.THRESH_TOZERO_INV
Ecco il codice di esempio:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("test1.jpg",1) # legge una immagine da un file
cv2.imshow('Immagine caricata dal file...',img) # mostra l'immagine in una finestra
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # converte in scala di grigi
# soglia binaria : se è sopra passa e viene saturata al livello specificato (255),
# ...se il valore è inferiore viene annullato (0)
ret,soglia = cv2.threshold(gray_image,127,255,cv2.THRESH_BINARY) ########################
cv2.imshow('Immagine filtrata con soglia=127',soglia) # mostra l'immagine ottenuta in una finestra
k = cv2.waitKey(0) # attende che venga premuto un tasto
cv2.destroyAllWindows() # ...chiude tutte le finestre
Esercizio:
Provare a variare il valore della soglia, e quello del valore di saturazione..cosa succede?Per ulteriori approfondimenti rimando alla documentazione ufficiale
domenica 3 maggio 2015
Esercizio 2 - conversione di una immagine in scala di grigi
In questo esercizio viene caricata un'immagine e convertita in scala di grigi usando la funzione:
Si vuole che venga visualizzata sia la finestra originale che quella dell'immagine modificata.
Lo scopo dell'esercizio e' capire come funziona la visualizzazione multipla delle immagini nelle finestre e la funzione per la conversione.
cv2.cvtColor(...).Si vuole che venga visualizzata sia la finestra originale che quella dell'immagine modificata.
Lo scopo dell'esercizio e' capire come funziona la visualizzazione multipla delle immagini nelle finestre e la funzione per la conversione.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("test.jpg",1) # legge una immagine da un file
cv2.imshow('Immagine caricata dal file.',img) # mostra l'immagine in una finestra
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # converte l'immagine caricata in una in scala di grigi...
k = cv2.waitKey(0) # attende che venga premuto un tasto
cv2.destroyAllWindows() # ...chiude tutte le finestre
Esercizio:
Visualizzare l'immagine convertita in una finestra.Esercizio 1 - Caricamento e visualizzazione immagini
Il primo esercizio consiste nel capire un semplice programma in python che si occupa dell'apertura di una immagine da file e della visualizzazione a schermo.
Una volta compreso il funzionamento occorre modificarlo per caricare e visualizzare una seconda immagine...
Questo esercizio dovrebbe essere abbastanza semplice, occorre però ricordarsi di eseguirlo all'interno della cartella dove sono presenti le immagini.
Una volta compreso il funzionamento occorre modificarlo per caricare e visualizzare una seconda immagine...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cv2
img = cv2.imread("test.jpg",1) # legge una immagine da un file
cv2.imshow('Immagine caricata dal file...',img) # mostra l'immagine in una finestra
k = cv2.waitKey(0) # attende che venga premuto un tasto
cv2.destroyAllWindows() # ...chiude tutte le finestre
Questo esercizio dovrebbe essere abbastanza semplice, occorre però ricordarsi di eseguirlo all'interno della cartella dove sono presenti le immagini.
Esercizio:
Caricare e visualizzare una seconda immagine: "test2.jpg".Benvenuti
Questo blog è stato creato per supportare il corso di introduzione alla visione artificiale che gli studenti di alcuni istituti delle scuole superiori della Valle d'Aosta stanno seguendo a Verrès.
I contenuti dei post che seguiranno non hanno lo scopo di essere esaustivi, ma la loro funzione è puramente di sostegno alle lezioni svolte in aula.
Buon lavoro a tutti!
I contenuti dei post che seguiranno non hanno lo scopo di essere esaustivi, ma la loro funzione è puramente di sostegno alle lezioni svolte in aula.
Buon lavoro a tutti!
Iscriviti a:
Post (Atom)