Mostrare un'immagine in una finestra con le funzioni dell'API di OpenCV

Da Gambas-it.org - Wikipedia.

OpenCV (Open Source Computer Vision Library) in via generale è una libreria di funzioni open source specifica per la vision computer e realizzata per fornire una infrastruttura comune per applicazioni di ottica artificiale.

Di seguito un possibile codice per far mostrare in modo molto semplice un'immagine all'interno di una finestra.

E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libopencv_highgui.so.4.2.0"


Data la semplicità del codice necessario, verrà descritto di seguito un breve esempio:

Library "libopencv_highgui:4.2.0"

Public Struct IplImage          ' indice:
  nSize As Integer              '    0
  ID As Integer                 '    4
  nChannels As Integer          '    8
  alphaChannel As Integer       '   12
  depth As Integer              '   16
  colorModel[4] As Byte         '   20
  channelSeq[4] As Byte         '   24
  dataOrder As Integer          '   28
  origin As Integer             '   32
  align As Integer              '   36
  width As Integer              '   40
  height As Integer             '   44
  roi As Pointer                '   48
  maskROI As Pointer            '   56
  imageId As Pointer            '   64
  tileInfo As Pointer           '   72
  imageSize As Integer          '   80
  imageData As Pointer          '   88
  widthStep As Integer          '   96
  BorderMode[4] As Integer      '  100
  BorderConst[4] As Integer     '  116
  imageDataOrigin As Pointer    '  136
End Struct

Private Const CV_WINDOW_AUTOSIZE As Integer = 1
Private Enum CV_LOAD_IMAGE_UNCHANGED = -1, CV_LOAD_IMAGE_GRAYSCALE = 0, CV_LOAD_IMAGE_COLOR,
             CV_LOAD_IMAGE_ANYDEPTH, CV_LOAD_IMAGE_ANYCOLOR = 4, CV_LOAD_IMAGE_IGNORE_ORIENTATION = 128

' int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE )
' Creates a window.
Private Extern cvNamedWindow(name As String, flags As Integer) As Integer

' IplImage* cvLoadImage( const char* filename, int flags )
' Loads an image from a file.
Private Extern cvLoadImage(filename As String, flagLIC As Integer) As IplImage
 
' void cvShowImage( const char* name, const CvArr* image )
' Displays an image in the specified window.
Private Extern cvShowImage(name As String, cvimage As IplImage)

' int cvWaitKey(int delay=0)
' Waits for a pressed key.
Private Extern cvWaitKey(delay As Integer) As Integer

' void cvReleaseImage(IplImage** image)
' Deallocates the image header and the image data.
Private Extern cvReleaseImage(image As Pointer)

' void cvDestroyWindow( const char* name )
' Destroys a window.
Private Extern cvDestroyWindow(name As String)

' void cvDestroyAllWindows(void)
' Destroys all of the HighGUI windows.
Private Extern cvDestroyAllWindows()

 
Public Sub Main()

 Dim imago As IplImage
 
' Il valore "CV_WINDOW_AUTOSIZE" fa adattare automaticamente la dimensione della finestra alla dimensione dell'immagine caricata,
' e non consente quindi una successiva modifica manuale di tali dimensioni. Inoltre, viene impostato l'eventuale titolo della finestra.
  cvNamedWindow("Titolo della finestra", CV_WINDOW_AUTOSIZE)

' Viene caricata l'immagine che dovrà essere mostrata nella finestra: [ Nota 1 ]   [ Nota 2 ]
  imago = cvLoadImage("/percorso/della/immagine/da/mostrare", CV_LOAD_IMAGE_COLOR)

' Viene mostrata l'immagine nella finestra. [ Nota 3 ]
  cvShowImage("Titolo della finestra", imago)
  
' Consente l'apertura della finestra, e resta in attesa della pressione di un tasto della tastiera:
  cvWaitKey(0)
  
 
' Libera la memoria occupata per l'immagine:
  cvReleaseImage(Object.Address(imago) + 24)
  
' Viene distrutta la finestra individuata sulla base del suo titolo:
  cvDestroyWindow("Titolo della Finestra")
  
' La seguente funzione distrugge tutte le finestre create con l'API di "OpenCV":
  cvDestroyAllWindows()

End


Note

[1] E' possibile caricare solo le immagini dei seguenti formati:

  • Windows bitmaps - BMP, DIB;
  • JPEG files - JPEG, JPG, JPE;
  • Portable Network Graphics - PNG;
  • Portable image format - PBM, PGM, PPM;
  • Sun rasters - SR, RAS;
  • TIFF files - TIFF, TIF.

[2] Il secondo parametro specifica la colorazione dell'immagine:

  • se > 0 (CV_LOAD_IMAGE_COLOR), l'immagine sarà comunque caricata come immagine a colori a 3-canali;
  • se = 0 (CV_LOAD_IMAGE_GRAYSCALE), l'immagine caricata sarà mostrata in scala di grigio;
  • se < 0 (CV_LOAD_IMAGE_UNCHANGED), l'immagine sarà caricata e mostrata così com'è.

[3] Se il 1° argomento della funzione "cvShowImage" ha un testo diverso da quello impostato nella funzione "cvNamedWindow", allora sarà creata un'ulteriore finestra e l'immagine verrà caricata in questa ulteriore finestra.



Riferimenti