Differenze tra le versioni di "Mostrare un'immagine in una finestra con le funzioni dell'API di OpenCV"

Da Gambas-it.org - Wikipedia.
(Pagina sostituita con ' <FONT Color=red><B>Con le nuove versioni di OpenCV non è più possibile utilizzare in Gambas alcune funzioni esterne utili per mostrare un'immagine in una finestra</b></...')
 
Riga 1: Riga 1:
'''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.
+
<FONT Color=red><B>Con le nuove versioni di OpenCV non è più possibile utilizzare in Gambas alcune funzioni esterne utili per mostrare un'immagine in una finestra</b></font>
 
 
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          <FONT Color=gray>' ''indice:''</font>
 
  nSize As Integer              <FONT Color=gray>' ''  0''</font>
 
  ID As Integer                <FONT Color=gray>' ''  4''</font>
 
  nChannels As Integer          <FONT Color=gray>' ''  8''</font>
 
  alphaChannel As Integer      <FONT Color=gray>' ''  12''</font>
 
  depth As Integer              <FONT Color=gray>' ''  16''</font>
 
  colorModel[4] As Byte        <FONT Color=gray>' ''  20''</font>
 
  channelSeq[4] As Byte        <FONT Color=gray>' ''  24''</font>
 
  dataOrder As Integer          <FONT Color=gray>' ''  28''</font>
 
  origin As Integer            <FONT Color=gray>' ''  32''</font>
 
  align As Integer              <FONT Color=gray>' ''  36''</font>
 
  width As Integer              <FONT Color=gray>' ''  40''</font>
 
  height As Integer            <FONT Color=gray>' ''  44''</font>
 
  roi As Pointer                <FONT Color=gray>' ''  48''</font>
 
  maskROI As Pointer            <FONT Color=gray>' ''  56''</font>
 
  imageId As Pointer            <FONT Color=gray>' ''  64''</font>
 
  tileInfo As Pointer          <FONT Color=gray>' ''  72''</font>
 
  imageSize As Integer          <FONT Color=gray>' ''  80''</font>
 
  imageData As Pointer          <FONT Color=gray>' ''  88''</font>
 
  widthStep As Integer          <FONT Color=gray>' ''  96''</font>
 
  BorderMode[4] As Integer      <FONT Color=gray>' '' 100''</font>
 
  BorderConst[4] As Integer    <FONT Color=gray>' '' 116''</font>
 
  imageDataOrigin As Pointer    <FONT Color=gray>' '' 136''</font>
 
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
 
 
<FONT color=gray>' ''int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE )''
 
' ''Creates a window.''</font>
 
Private Extern cvNamedWindow(name As String, flags As Integer) As Integer
 
 
<FONT color=gray>' ''IplImage* cvLoadImage( const char* filename, int flags )''
 
' ''Loads an image from a file.''</font>
 
Private Extern cvLoadImage(filename As String, flagLIC As Integer) As IplImage
 
 
 
<FONT color=gray>' ''void cvShowImage( const char* name, const CvArr* image )''
 
' ''Displays an image in the specified window.''</font>
 
Private Extern cvShowImage(name As String, cvimage As IplImage)
 
 
<FONT color=gray>' ''int cvWaitKey(int delay=0)
 
' ''Waits for a pressed key.''</font>
 
Private Extern cvWaitKey(delay As Integer) As Integer
 
 
<FONT color=gray>' ''void cvReleaseImage(IplImage** image)''
 
' ''Deallocates the image header and the image data.''</font>
 
Private Extern cvReleaseImage(image As Pointer)
 
 
<FONT color=gray>' ''void cvDestroyWindow( const char* name )''
 
' ''Destroys a window.''</font>
 
Private Extern cvDestroyWindow(name As String)
 
 
<FONT color=gray>' ''void cvDestroyAllWindows(void)''
 
' ''Destroys all of the HighGUI windows.''</font>
 
Private Extern cvDestroyAllWindows()
 
 
 
 
'''Public''' Sub Main()
 
 
  Dim imago As IplImage
 
 
 
<FONT color=gray>' ''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.''</font>
 
  cvNamedWindow("Titolo della finestra", CV_WINDOW_AUTOSIZE)
 
 
<FONT color=gray>' ''Viene caricata l'immagine che dovrà essere mostrata nella finestra:''</font> <SUP>[ [[#Note|Nota 1]] ]</sup>  <SUP>[ [[#Note|Nota 2]] ]</sup>
 
  imago = cvLoadImage("<FONT color=gray>''/percorso/della/immagine/da/mostrare''</font>", CV_LOAD_IMAGE_COLOR)
 
 
<FONT color=gray>' ''Viene mostrata l'immagine nella finestra.''</font> <SUP>[ [[#Note|Nota 3]] ]</sup>
 
  cvShowImage("Titolo della finestra", imago)
 
 
 
<FONT color=gray>' ''Consente l'apertura della finestra, e resta in attesa della pressione di un tasto della tastiera:''</font>
 
  cvWaitKey(0)
 
 
 
 
 
<FONT color=gray>' ''Libera la memoria occupata per l'immagine:''</font>
 
  cvReleaseImage(Object.Address(imago) + 24)
 
 
 
<FONT color=gray>' ''Viene distrutta la finestra individuata sulla base del suo titolo:''</font>
 
  cvDestroyWindow("Titolo della Finestra")
 
 
 
<FONT color=gray>' ''La seguente funzione distrugge <SPAN style="text-decoration:underline">tutte</span> le finestre create con l'API di "OpenCV":''</font>
 
  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 <SPAN style="text-decoration:underline">diverso</span> da quello impostato nella funzione "cvNamedWindow", allora sarà creata un'ulteriore finestra e l'immagine verrà caricata in questa ulteriore finestra.
 
 
 
 
 
 
 
 
 
=Riferimenti=
 
* http://docs.opencv.org/index.html
 

Versione attuale delle 19:30, 5 dic 2020

Con le nuove versioni di OpenCV non è più possibile utilizzare in Gambas alcune funzioni esterne utili per mostrare un'immagine in una finestra