Tutoriais‎ > ‎OpenCV‎ > ‎

Exemplo de Código Fonte para selecionar arquivos via interface gráfica

postado em 1 de dez de 2014 16:48 por Prof. Rodrigo Costa   [ 2 de dez de 2014 03:20 atualizado‎(s)‎ ]
Com uma pequena configuração, é possível utilizar interfaces gráficas do Windows no C para utilizar junto ao OpenCV.

Antes de mais nada, é necessário incluir a biblioteca nas diretrizes de ligação do projeto c++. Na figura a seguir é apresentado um exemplo de configuração dessa diretriz no eclipse.


Usando as interfaces gráficas padrão do windows, criei a função select_file() que abre a interface, carrega a imagem e a exibe. 

O código fonte deste teste é mostrado a seguir: 

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio. h>
#include <windows. h>
using namespace std;
using namespace cv;
Mat select_file()
{
   OPENFILENAME ofn;
   char szFileName[ 500] ;
   szFileName[ 0] = '\0' ;
   memset(&ofn, 0, sizeof(ofn)) ;
   ofn. lStructSize = sizeof(ofn) ; // comprimento da estrutura, usa-se sizeof(OPENFILENAME) 
   ofn. hwndOwner = NULL; // manipulador da janela que possui a interface. Neste caso foi setado NULL pois o código não foi chamado por outra GUI.
   ofn. lpstrFile = szFileName; // ponteiro para onde será armazenado o nome do arquivo
   ofn. nMaxFile = sizeof(szFileName) ; // tamanho máximo do nome do arquivo
   ofn. hInstance = NULL; 
   ofn. lpstrFilter = TEXT("Images *. png, *. jpg, *. bmp\0*. png; *. jpg; *. bmp\0All Files*.*\0*.*\0\0") ; // filtro contendo os tipos de arquivos a serem abertos.
                      // usa-se a sintaxe: Texto\0extensoes separadas por ;\0 Texto\0Extensoes\0 \0 
   ofn. nFilterIndex = 1; // tipo de filtro de arquivo padrão.
   ofn. Flags= OFN_FILEMUSTEXIST; // caso você deseje mais opções, deve separá-las através do operador ou bitwise |. 
                                  // Exemplos de flags: OFN_FILEMUSTEXIST requer que o arquivo exista. OFN_ALLOWMULTISELECT permite que selecione vários arquivos.
   int bRes;
   bRes = GetOpenFileName(&ofn) ;
   MessageBox(0, szFileName, "-", MB_OK) ;
   Mat img = imread(szFileName) ;
   imshow("Original", img) ;
   waitKey(0) ;
   return img;
}
int main( int argc, const char** argv )
{
   select_file() ;
   return 0;
}


Comments