[Tutorial OpenCV Qt] Comprimere un immagine in memoria

Image Compression
Image Compression
Image Compression

In queste breve tutorial mostrerò una semplice procedura di compressione di un’immagine in memoria. Questa operazione è necessaria quando l’immagine, acquisita ad esempio da una webcam, deve essere inviata ad un altro dispositivo.

Il software di demo sfrutta quanto visto nei tutorial “OpenGL Widget per visualizzare immagini da OpenCV in una GUI con Qt” (parte1 parte2), se non avete ancora avuto modo di seguire i due tutorial vi consiglio di darci un’occhiata.

A differenza del precedente tutorial la nostra GUI avrà due widget di visualizzazione: uno per l’immagine originale (RAW) e uno per l’immagine compressa. In questo modo sarà possibile valutare la qualità della compressione.

La qualità è regolabile tramite uno Slider: 0 -> pessima qualità, massima compressione; 100 -> ottima qualità, minima compressione.

E’ possibile anche scegliere la modalità di compressione tra i formati JPEG e PNG. Si noterà che JPEG genera immagini qualità inferiore rispetto a PNG, ma la loro dimensione è decisamente inferiore.

Prendendo come riferimento il tutorial “OpenGL Widget per visualizzare immagini da OpenCV in una GUI con Qt”, tutto quello che dobbiamo fare è modificare la funzione: timerEvent(QTimerEvent *event):

Tra le righe 8 e 25 vi è un semplice recupero dei parametri impostati da GUI, dalla riga 26 alla riga 45 vengono calcolati gli FPS per avere un’idea delle risorse di calcolo richieste dalla compressione. La compressione vera e propria è effettuata alla riga 56 tramite la funzione di OpenCV imencode, a cui vanno passati i parametri relativi al tipo di compressione da effettuare e alla relativa qualità.
La riga 58 vede da decompressione dell’immagine dal buffer di memoria in modo che possa essere visualizzata nel widget di destra.
In un utilizzo client/server, la riga 56 sarà implementata dal server prima di inviare l’immagine, la riga 58 la effettuerà il client appena ricevuti tutti i dati.

A breve sarà disponibile un tutorial sulla realizzazione di un server in grado di inviare un flusso video su ethernet con protocollo UDP, questo server è utilizzato nel mio progetto MyzharBot per inviare la soggettiva del robot ad una GUI remota.

ImageCompressionDemo
ImageCompressionDemo
ImageCompressionDemo.rar
14.6 KiB
1027 Downloads
Dettagli

Lascia un Commento

This site uses cookies. Find out more about this site’s cookies.
%d bloggers like this: