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;
}