Vai al contenuto principale

Tutorial OpenCV: libera la potenza dell'elaborazione dei dati visivi

Questo articolo fornisce una guida completa all'utilizzo della libreria OpenCV per l'elaborazione di immagini e video in un ambiente Python. Esploriamo l'ampia gamma di funzionalità di elaborazione delle immagini offerte da OpenCV, dalle tecniche di base ad applicazioni più avanzate.
Aggiornato 29 set 2026  · 13 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

OpenCV, acronimo di Open Source Computer Vision Library, è una solida libreria open source ampiamente adottata nei progetti di visione artificiale. OpenCV è progettata per offrire un framework integrato per la computer vision in tempo reale e funge da piattaforma che facilita numerose applicazioni di analisi di immagini e video.

La libreria OpenCV svolge un ruolo fondamentale nel permettere a sviluppatori e ricercatori di sfruttare i vantaggi dell'elaborazione dei dati visivi. Le sue funzionalità coprono varie applicazioni, dall'elaborazione di immagini di base a compiti più complessi come l'identificazione di oggetti e il riconoscimento facciale. Offrendo un'ampia raccolta di algoritmi, metodi e operazioni per l'elaborazione dei dati visivi, OpenCV facilita lo sviluppo di sistemi intelligenti in grado di riconoscere e classificare contenuti visivi.

Una delle applicazioni più rilevanti di OpenCV è il riconoscimento di oggetti, in cui i suoi algoritmi permettono di identificare e localizzare oggetti all'interno di immagini o flussi video. Questa capacità si estende anche ad altri compiti di visione artificiale, come il riconoscimento facciale, il tracciamento del movimento e il supporto a tecnologie di realtà aumentata.

In questo articolo esploriamo:

  • Le funzionalità di elaborazione delle immagini abilitate dalla libreria OpenCV
  • Come installare la libreria OpenCV in un ambiente Python
  • Una panoramica delle tecniche di elaborazione delle immagini e come implementarle in OpenCV
  • Tecniche di elaborazione video con OpenCV

Installazione di OpenCV

Prerequisiti

Per seguire questo tutorial su OpenCV ti serviranno una conoscenza intermedia di Python e una comprensione di base della visione artificiale. La familiarità con i principi dell'elaborazione delle immagini migliorerà inoltre l'esperienza di apprendimento lungo il tutorial, anche se i concetti chiave vengono definiti quando citati.

Passaggi di installazione

  1. Installazione di Python: Assicurati di avere Python installato sul sistema. Puoi scaricare la versione più recente dal sito ufficiale di Python.
  2. Ambiente e gestore pacchetti (opzionale): Puoi usare gestori di pacchetti come Anaconda per semplificare la gestione delle librerie. Scarica e installa Anaconda dal loro sito ufficiale.
  3. Installazione di OpenCV: Apri un prompt dei comandi o una finestra del terminale e usa il seguente comando per installare OpenCV con pip (il gestore pacchetti di Python):
!pip install opencv-python

Se stai usando Anaconda, puoi usare il seguente comando:

!conda install -c conda-forge opencv

Verifica

Per confermare che l'installazione sia andata a buon fine, esegui il seguente codice in un interprete Python o in un Jupyter Notebook:

import cv2
print(cv2.__version__)

Se l'installazione è riuscita, verrà stampato il numero di versione della libreria OpenCV installata. Se il numero di versione non viene stampato nel terminale o nella console, significa che il processo di installazione non è andato a buon fine.

Nota importante se usi Google Colab: Per adattare il codice alla visualizzazione delle immagini nei notebook di Google Colab, è necessario sostituire la tradizionale funzione cv2.imshow con cv2_imshow fornita dalle librerie specifiche di Google Colab. Questa modifica garantisce la compatibilità con l'ambiente Colab, che non supporta cv2.imshow. Per implementare il cambiamento, importa la funzione cv2_imshow dalle patch di Google Colab come segue:

from google.colab.patches import cv2_imshow

# Displaying an image in a window
cv2_imshow(image)

Introduzione alle funzionalità di OpenCV

Caricare e visualizzare un'immagine in OpenCV

Lo snippet di codice seguente introduce un punto di partenza fondamentale per utilizzare la libreria OpenCV nell'elaborazione delle immagini. Caricare un'immagine in un ambiente di sviluppo è un'operazione condotta in contesti diversi, da semplici progetti di visione artificiale ad applicazioni di rilevamento di oggetti in tempo reale in produzione. Visualizzare un'immagine è altrettanto cruciale per osservare il contenuto di un'immagine o il risultato di un'elaborazione. Nel codice seguente, leggiamo un JPG da un file e lo visualizziamo con la libreria OpenCV.

Il seguente snippet di codice può essere usato per caricare e visualizzare immagini in OpenCV:

import cv2

# Loading image from a file
image = cv2.imread('your/image/path.jpg')

# Displaying an image in a window
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

image1.png

Impiegati d'ufficio attorno a un laptop. Fonte: Canva

In questo codice, l'immagine viene letta da un file usando «cv2.imread» e poi visualizzata in una finestra con l'aiuto di «imshow». La funzione «cv2.waitKey(0)» fa sì che la finestra rimanga aperta finché l'utente non la chiude premendo un tasto.

L'elaborazione delle immagini consiste nel manipolare i dati dei pixel in un'immagine in modo da modificarne l'aspetto visivo, per l'estrazione di caratteristiche, l'analisi delle immagini o altri compiti legati alla visione artificiale. Esempi di tecniche di elaborazione delle immagini sono l'elaborazione del colore, il filtraggio, la segmentazione, il rilevamento dei bordi, ecc.

Lo snippet di codice seguente mostra una semplice tecnica di elaborazione dell'immagine caricata nello snippet precedente. La tecnica mostrata qui è una semplice conversione dei colori, nello specifico una conversione in scala di grigi. La conversione in scala di grigi è una tecnica fondamentale nell'elaborazione delle immagini, che riduce l'immagine a un'unica banda di valori di intensità.

# Converting an image to grayscale form
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Displaying the grayscale image
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Qui, cv2.cvtColor() converte l'immagine caricata in scala di grigi.

Impiegati d'ufficio attorno a un laptop (scala di grigi). Fonte: Canva

Impiegati d'ufficio attorno a un laptop (scala di grigi). Fonte: Canva

Rilevamento dei bordi

Il rilevamento dei bordi è una tecnica fondamentale nell'elaborazione delle immagini e nella visione artificiale. Identifica i punti in un'immagine in cui la luminosità cambia bruscamente o presenta discontinuità. Rilevare i bordi è essenziale nella visione artificiale, soprattutto quando si individuano caratteristiche all'interno dei dati di immagine. In generale, il rilevamento dei bordi funziona individuando bruschi cambiamenti nelle intensità dei pixel. Unendo questi punti di forte variazione di luminosità si formano linee e bordi che delineano gli oggetti in un'immagine.

Con gli algoritmi di rilevamento dei bordi, è possibile rilevare minuscole caratteristiche testurali e strutturali di un oggetto in un'immagine.

Diversi algoritmi di rilevamento dei bordi, come il Canny Edge Detector, il metodo di Sobel e il metodo della logica fuzzy, sono utilizzati nel riconoscimento di oggetti, nella segmentazione delle immagini e nell'estrazione di caratteristiche. Il seguente snippet di codice mostra un rilevamento dei bordi di base usando OpenCV:

# Applying Canny edge detection (a simple edge detection method)
edges = cv2.Canny(gray_image, 50, 150)

# Displaying the edge-detected image
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

L'algoritmo di rilevamento dei bordi Canny è reso facilmente disponibile nella libreria OpenCV tramite la funzione sottostante «cv2.Canny()» che si applica al rilevamento dei bordi di un oggetto per l'immagine in scala di grigi.

Impiegati d'ufficio attorno a un laptop (scala di grigi). Fonte: Canva

Impiegati d'ufficio attorno a un laptop (scala di grigi). Fonte: Canva

Ridimensionare e ruotare le immagini

Ridimensionare e ruotare le immagini sono esigenze fondamentali nell'elaborazione delle immagini perché facilitano l'adattamento e la trasformazione dei contenuti visivi. Ridimensionare un'immagine significa cambiarne le dimensioni, ingrandendola o riducendola, ed è essenziale per scalare e posizionare le immagini in ambienti specifici.

La rotazione è un aggiustamento che modifica l'angolo con cui un'immagine viene vista rispetto a un angolo di rotazione specificato. Entrambe le operazioni sono comunemente applicate come passaggi di pre-elaborazione delle immagini per vari scopi, tra cui visione artificiale, machine learning e grafica. Ad esempio, nell'addestramento di reti neurali profonde, la rotazione e il ridimensionamento delle immagini sono tecniche di data augmentation utilizzate per aumentare la variabilità del dataset di addestramento fornito alle reti durante l'addestramento. L'obiettivo della data augmentation è addestrare la rete con un dataset sufficientemente vario da consentire una buona generalizzazione su dati mai visti.

Per ridimensionare e ruotare le immagini con OpenCV, puoi usare il seguente codice:

# Resizing the image
resized_image = cv2.resize(image, (width, height))

# Rotating the image by 45 degrees
rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 45, 1)
rotated_image = cv2.warpAffine(resized_image, rotation_matrix, (width, height))

# Displaying the resized and rotated images
cv2.imshow('Resized Image', resized_image)
cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Mentre «cv2.resize» viene usato per ridimensionare l'immagine, «cv2.getRotationMatrix2D» insieme a «cv2.warpAffine» vengono entrambi usati per ruotare l'immagine.

Impiegati d'ufficio attorno a un laptop (ruotata). Fonte: Canva

Impiegati d'ufficio attorno a un laptop (ruotata). Fonte: Canva

Caricare ed elaborare video

I video sono una sequenza di immagini presentate in successione. Nella visione artificiale, le capacità di elaborazione video sono cruciali per sviluppare e costruire applicazioni che elaborano dati in tempo reale e registrati. A differenza della natura statica delle immagini, l'elaborazione video gestisce sequenze temporali di immagini, consentendo l'analisi del movimento, dei cambiamenti nel tempo e l'estrazione di pattern temporali.

La natura dinamica dei contenuti nei dati video richiede che le tecniche di elaborazione video siano efficienti, specialmente in sistemi critici, ad esempio in applicazioni come sorveglianza, guida autonoma, riconoscimento di attività e molto altro, dove comprendere movimento e cambiamento è essenziale.

Un vantaggio significativo dell'uso di OpenCV per i compiti di elaborazione video è la disponibilità di una suite di funzionalità complete progettate per gestire i flussi video in modo efficiente. OpenCV fornisce strumenti di acquisizione, elaborazione e analisi video come fa con le immagini.

Il seguente snippet di codice può essere usato per caricare ed elaborare un video presente in locale:

import cv2

# Open a video capture object
cap = cv2.VideoCapture("Your video's path.mp4")

# To check if the video has opened successfully of not
if not cap.isOpened():
    print("Error: Couldnot open the video.")
    exit()

# Loop through the video frames
while True:
    # Reading a frame from the video
    ret, frame = cap.read()

    # Break the loop if the video has ended
    if not ret:
        break

    # Display the original frame
    cv2.imshow('Original Video', frame)

    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('Black and White Video', gray_frame)

    # Perform edge detection on the video
    edges_frame = cv2.Canny(gray_frame, 50, 150)
    cv2.imshow('Edges Video', edges_frame)

    # Break the loop if 'q' key is pressed
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

# Release the video capture object and close all windows
cap.release()
cv2.destroyAllWindows()

In questo codice, la classe «cv2.VideoCapture» viene usata per accedere a un file video e leggere i frame tramite il metodo «cap.read». Mostra prima il video originale, poi lo converte in bianco e nero e infine esegue il rilevamento dei bordi per ogni frame. Il ciclo continua finché il video non termina o finché non arriva l'input da tastiera per uscire. «cv2.waitKey(25)» consente un breve ritardo tra i frame per visualizzarli, garantendo una riproduzione fluida.

Rilevamento di persone con OpenCV e Yolo

Rilevamento di oggetti e rilevamento di persone

Il rilevamento di oggetti è un compito fondamentale della visione artificiale che mira a individuare e localizzare oggetti in un'immagine o in un video e a fornire risultati di riconoscimento – un elenco di etichette di classe rilevate e relative bounding box. Il rilevamento di persone, una variante del riconoscimento di oggetti, si concentra sull'identificazione e la localizzazione delle persone all'interno di informazioni visive.

Applicazioni del rilevamento di persone

Le applicazioni del rilevamento di persone includono sorveglianza, gestione delle folle, conteggio delle persone, tracciamento, interazione uomo-computer e ambienti smart. Nella sorveglianza, questa tecnologia aiuta a rilevare attività sospette, mentre nella gestione delle folle supporta il riconoscimento dei gesti e il tracciamento. Il rilevamento di persone svolge un ruolo cruciale nell'interazione uomo-computer ed è impiegato anche in ambienti smart per l'ottimizzazione delle risorse e una maggiore sicurezza.

Modello di rilevamento oggetti YOLO

YOLO, acronimo di "You Only Look Once", è emerso come un sistema comunemente utilizzato che raggiunge in modo efficiente il riconoscimento di oggetti in tempo reale. A differenza dei metodi classici di rilevamento degli oggetti, YOLO divide l'immagine in una griglia di celle, prevedendo simultaneamente bounding box e probabilità di classe per ciascuna cella.

Puoi approfondire il rilevamento oggetti con YOLO nella nostra guida completa.

Rilevamento di persone in un'immagine

Di seguito trovi uno snippet di codice che usa OpenCV e Yolo per il rilevamento di persone in un'immagine:

import cv2

net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
layer_names = net.getUnconnectedOutLayersNames()

image = cv2.imread('image path.jpg')
height, width = image.shape[:2]

blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)
outs = net.forward(layer_names)

for out in outs:
    for detection in out:
        scores = detection[5:]
        class_id = np.argmax(scores)
        confidence = scores[class_id]
        
        if confidence > 0.5 and class_id == 0:  # Class ID for person
            box = detection[:4] * np.array([width, height, width, height])
            (x, y, w, h) = box.astype(int)
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('Person Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Rilevamento di persone in un video

In modo analogo, la struttura del codice segue principi simili per il rilevamento di persone in un video. Invece di elaborare una singola immagine statica, lo script o l'applicazione elabora continuamente i frame del video.

Lo stesso principio è alla base dell'identificazione delle persone sia nelle immagini sia nelle clip video, con la principale differenza rappresentata dal fattore tempo. Con le immagini, il compito consiste nel riconoscere e posizionare le persone in singoli frame statici.

Questa applicazione è più adatta a istantanee di sorveglianza e ad altre fotografie non sovrapposte. Al contrario, con i video l'obiettivo è identificare e tracciare gli individui mentre si spostano nei frame successivi. Questo viene talvolta chiamato tracciamento di oggetti nei video. L'aspetto temporale è cruciale quando si considerano i movimenti e le interazioni umane nel tempo, rendendo il rilevamento di persone basato su video uno strumento fondamentale per applicazioni in tempo reale, tra cui sorveglianza di sicurezza, monitoraggio delle folle e analisi dei comportamenti.

Applicazioni reali e considerazioni etiche

Altri casi d'uso reali del rilevamento di persone includono smart city, analisi retail e sicurezza pubblica. Tuttavia, ci sono considerazioni etiche legate a privacy, consenso e uso improprio della tecnologia. Un'implementazione responsabile nei vari domini si ottiene bilanciando vantaggi e preoccupazioni etiche.

Conclusione

Questo tutorial ha mostrato gli aspetti fondamentali del lavoro con la libreria OpenCV per vari compiti di visione artificiale. Partendo dalle basi, ha illustrato come installare OpenCV in un ambiente Python. Sono state presentate le operazioni di OpenCV per il caricamento e la visualizzazione di immagini insieme a tecniche di elaborazione come la conversione in scala di grigi e l'applicazione del rilevamento dei bordi. Nel complesso, è chiaro che OpenCV può eseguire sofisticate trasformazioni e analisi delle immagini, incluse l'applicazione di tecniche di elaborazione ai frame video.

In particolare, OpenCV svolge un ruolo cruciale nella visione artificiale applicata poiché offre versatilità e robuste capacità, permettendo a ingegneri della visione artificiale e professionisti del machine learning di affrontare molte sfide legate all'elaborazione dei dati visivi. Il vantaggio chiave dell'utilizzo della libreria OpenCV è che semplifica l'applicazione degli algoritmi di visione artificiale e trasforma in modo efficiente i concetti applicativi in implementazioni pratiche.

Migliora la tua comprensione dei concetti trattati in questo articolo approfondendo l'elaborazione delle immagini in Python con un corso ben curato. Questo corso amplia la tua cassetta degli attrezzi per l'elaborazione delle immagini e la visione artificiale con librerie aggiuntive come Sci-kit Image e Numpy.


Richmond Alake's photo
Author
Richmond Alake
LinkedIn

Creatore di contenuti su Machine Learning con oltre 1M di visualizzazioni— Ingegnere di Computer Vision. Interessato ad acquisire e condividere conoscenze su tecnologia e finanza

Argomenti
Machine Learning
Python

Inizia oggi il tuo percorso con Python!

Corso

Python - Livello Intermedio

4 ore
1.4M
Migliora le tue competenze nella scienza dei dati creando visualizzazioni con Matplotlib e manipolando DataFrames con pandas.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra AltroMostra Altro