OpenCV
OpenCV è una libreria open source con oltre 2.500 algoritmi per l'elaborazione delle immagini e la visione artificiale. Scopri cosa fa, come si abbina al deep learning e consulta il codice.
OpenCV (Libreria open source di visione artificiale) è una libreria open source con oltre 2.500 algoritmi ottimizzati per l'elaborazione delle immagini e la visione artificiale (CV). Legge e scrive immagini e video, acquisisce flussi dalle videocamere, filtra e trasforma i pixel, rileva e abbina caratteristiche, calibra le videocamere ed esegue reti neurali addestrate. OpenCV è nato presso Intel Research nel 1999, è scritto in C++ con binding per Python e Java ed è distribuito con licenza Apache 2.0 dalla versione 4.5.0. In Python si installa con pip install opencv-python e si importa come cv2; ogni immagine è rappresentata come un array NumPy.
Cosa fa OpenCV#
- I/O di immagini e video: legge e scrive i formati immagine più comuni, decodifica file video e acquisisce fotogrammi da videocamere e flussi di rete.
- Elaborazione delle immagini: ridimensionamento, conversione dello spazio colore, sfocatura, aumento della nitidezza, sogliatura e operazioni morfologiche: le normali fasi di preelaborazione prima che un'immagine raggiunga un modello.
- Rilevamento e abbinamento delle caratteristiche: i rilevatori di angoli e punti chiave, come SIFT e ORB, individuano punti distintivi che possono essere abbinati tra immagini per creare panorami, localizzare oggetti ed eseguire SLAM visivo. SIFT è entrato nella libreria principale con la versione 4.4.0, dopo la scadenza del relativo brevetto.
- Geometria delle videocamere: la calibrazione elimina la distorsione dell'obiettivo, le omografie correggono la prospettiva e l'abbinamento stereo ricava la profondità da due videocamere per la robotica e la ricostruzione 3D.
- Analisi video: la sottrazione dello sfondo separa gli oggetti in movimento da una scena statica e il flusso ottico misura lo spostamento dei pixel tra i fotogrammi.
- Inferenza con reti neurali profonde: il modulo
dnncarica modelli addestrati, ad esempio in formato ONNX, e li esegue su CPU o GPU senza installare un framework di deep learning.
Questa pipeline classica individua i contorni delle forme in un'immagine senza ricorrere a modelli appresi:
import urllib.request
import cv2
import numpy as np
# Download a sample image and decode it into a BGR NumPy array
data = urllib.request.urlopen("https://ultralytics.com/images/bus.jpg").read()
image = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)
# Classical pipeline: grayscale, blur to suppress noise, then Canny edge detection
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
# Trace connected edge pixels into contours, the outlines of shapes in the scene
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(f"Image shape: {image.shape}, contours found: {len(contours)}")Stampa Image shape: (1080, 810, 3), contours found: 1449: un'immagine da 1080×810 con tre canali colore e 1.449 contorni separati tracciati dai suoi bordi. OpenCV memorizza i canali colore nell'ordine blu-verde-rosso (BGR), quindi le immagini destinate alle librerie che si aspettano RGB richiedono prima una conversione cv2.cvtColor.
OpenCV e i framework di deep learning#
OpenCV e i framework di deep learning, come PyTorch e TensorFlow, intervengono in fasi diverse della stessa pipeline. OpenCV gestisce la preelaborazione dei dati e l'output attorno alla rete: acquisisce i fotogrammi, li ridimensiona, disegna i risultati e scrive il video di output; nel frattempo il framework addestra ed esegue la rete neurale convoluzionale. Un'applicazione video in tempo reale ripete questi passaggi per ogni fotogramma:
Ultralytics YOLO26 accetta direttamente i fotogrammi NumPy BGR di OpenCV e results[0].plot() restituisce un fotogramma annotato nello stesso formato, quindi il modello si integra in un ciclo OpenCV senza conversioni. Questo esempio esegue una volta il ciclo sull'immagine di esempio inclusa nel pacchetto ultralytics:
import cv2
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# OpenCV carica l'immagine di esempio inclusa nel pacchetto come array NumPy BGR
frame = cv2.imread(str(ASSETS / "bus.jpg"))
# YOLO26 riceve direttamente il fotogramma OpenCV
model = YOLO("yolo26n.pt")
results = model(frame)
# plot() restituisce un array BGR annotato che OpenCV può visualizzare o salvare
annotated = results[0].plot()
cv2.imwrite("bus_annotated.jpg", annotated)All'interno di un ciclo video, le stesse tre chiamate vengono eseguite su ogni fotogramma proveniente da cv2.VideoCapture; cv2.imshow o cv2.VideoWriter sostituisce cv2.imwrite.










