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

Post date: 02/12/2014 00:48:21

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;

}