Configurar o OpenCV-2.3 para o Visual Studio 2010

Estou tentando usar o opencv 2.3 com o Visual Studio 2010 Express. Meu código é do exemplo:

#include "stdafx.h" #include  int _tmain(int argc, _TCHAR* argv[]) { int c; // allocate memory for an image IplImage *img; // capture from video device #1 CvCapture* capture = cvCaptureFromCAM(1); // create a window to display the images cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); // position the window cvMoveWindow("mainWin", 5, 5); while(1) { // retrieve the captured frame img=cvQueryFrame(capture); // show the image in the window cvShowImage("mainWin", img ); // wait 10 ms for a key to be pressed c=cvWaitKey(10); // escape key terminates program if(c == 27) break; } return 0; } 

O que eu fiz até agora?

  • Adicionado build\bin e um dos build\{x86|x64}\{vc9\vc10\mingw}\bin para o caminho do meu sistema (para usar DLLs).
  • Adicionado a build\{x86|x64}\{vc9\vc10\mingw}\lib ou build\{x86|x64}\{vc9\vc10\mingw}\staticlib como diretórios da biblioteca para minhas configurações de vinculador.
  • Adicionado build\include e build\include\opencv como diretórios include às configurações do meu compilador.

E o resultado é:

1> LINK: erro fatal LNK1104: não é possível abrir o arquivo ‘c: \ OpenCV2.3 \ build \ x86 \ vc10 \ lib.obj’

Não há lib.obj nas pastas do OpenCV. Eu só descompactei o OpenCV-2.3.0-win-superpack.exe , sem usar o software CMake.

O que estou fazendo de errado?

Bem, o guia oficial é para instalar o OpenCV 2.1 no VS2010, então eu escrevi algumas instruções abaixo que mostra como instalar e configurar corretamente a versão x86 do OpenCV 2.3 no Visual Studio 2010 (Express), já que muitas pessoas parecem ter problemas configurando corretamente.

Faça o download do OpenCV-2.3.0-win-superpack.exe e execute-o para extrair todos os arquivos para uma pasta chamada OpenCV2.3 . Dentro desta pasta existem 2 diretórios: build e opencv . Toda a configuração no VS2010 irá se referir ao diretório de build . Para propósitos práticos, eu mudei a pasta OpenCV2.3 para a minha unidade C:\ , então preste atenção nos caminhos que eu sugiro neste guia, pois o seu pode ser diferente.

No Visual Studio, crie um novo projeto de aplicativo de console do Win32 e nomeie-o como quiser. Depois disso, uma nova janela será exibida. Clique na guia Application Settings e verifique se a opção Empty Project é selecionada:

insira a descrição da imagem aqui

Adicione um novo arquivo main.cpp à pasta Source Files , então adicione este código ao main.cpp :

 #include  #include  #include  int main(int argc, char* argv[]) { if (argc < 2) { printf("Usage: ./opencv_hello \n"); return -1; } IplImage* img = cvLoadImage(argv[1], CV_LOAD_IMAGE_UNCHANGED); if (!img) { return -1; } cvNamedWindow("display", CV_WINDOW_AUTOSIZE); cvShowImage("display", img ); cvWaitKey(0); return 0; } 

Neste ponto, precisamos configurar o projeto para que ele possa localizar headers e bibliotecas do OpenCV. Vá para as propriedades do projeto ( ALT + F7 ) e, assim que a nova janela aparecer, faça o seguinte:

  • Na checkbox Configuração , selecione Todas as configurações

  • Abra Configuration Properties> C / C ++> General e edite o campo Additional Include Directories para adicionar estes 3 caminhos (para os headers):

    C:\OpenCV2.3\build\include\opencv

    C:\OpenCV2.3\build\include\opencv2

    C:\OpenCV2.3\build\include

insira a descrição da imagem aqui

Note que include\opencv é para a interface C do OpenCV e include\opencv2 se for para a interface C ++. Também estamos adicionando a pasta include para evitar que nossa compilation seja quebrada por alguns headers da interface C que se referem a headers C ++ como opencv2\core .

  • Em seguida, inclua o caminho das bibliotecas em Propriedades de Configuração> Vinculador> Geral e, no campo Diretórios de Biblioteca Adicionais , inclua isto: C:\OpenCV2.3\build\x86\vc9\lib :

insira a descrição da imagem aqui

  • Finalmente, para este teste simples, vamos adicionar as bibliotecas opencv_core230.lib e opencv_highgui230.lib . Então vá para Configuration Properties> Linker> Input e adicione-os:

insira a descrição da imagem aqui

Ao escrever aplicativos mais complexos, você provavelmente precisará adicionar outras bibliotecas do OpenCV que eu não mencionei neste nosso pequeno projeto.

Pressione F7 para construir solução e você verá:

 ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ========== 

Para poder executar o aplicativo, você precisará modificar a variável de ambiente PATH do seu sistema para adicionar o local das DLLs do OpenCV. Adicione isto ao final do PATH:

 ; C:\OpenCV2.3\build\x86\vc9\bin 

Se você está lutando com a edição das variables ​​de ambiente PATH, você também pode copiar os arquivos .dll necessários para a sua pasta de projeto: Os arquivos dll estão localizados nesta pasta ../OpenCV2.3/build.x86/vc9/bin

Em seguida, copie-os para a pasta onde o arquivo .exe é criado: c: \ Users \ PIMMES \ Documents \ Visual Studio 2010 \ Projects \ autofaces \ Debug (Claro que você tem que mudar o caminho para a sua pasta de debugging)

Você só tem que copiar os arquivos .dll que você está usando em seu projeto (#include por exemplo) Por exemplo, se você receber uma mensagem de erro dizendo opencv_core231d.dll não for encontrado, em seguida, obter este arquivo .dll do local acima (pasta bin ) e copie para a pasta Debug do seu projeto.

Espero que isto ajude..

Sempre que eu faço um programa que usa o opencv 2.2 ou superior, incluo tudo e, em seguida, comento as bibliotecas que não preciso. Tente isso, tenho certeza que você precisa de mais do que highgui.h

 #include "opencv2\opencv.hpp" using namespace cv; //#pragma comment(lib, "opencv/opencv_calib3d231.lib") //#pragma comment(lib, "opencv/opencv_contrib231.lib") #pragma comment(lib, "opencv/opencv_core231.lib") //#pragma comment(lib, "opencv/opencv_features2d231.lib") //#pragma comment(lib, "opencv/opencv_flann231.lib") //#pragma comment(lib, "opencv/opencv_gpu231.lib") //#pragma comment(lib, "opencv/opencv_haartraining_engine.lib") #pragma comment(lib, "opencv/opencv_highgui231.lib") //#pragma comment(lib, "opencv/opencv_imgproc231.lib") //#pragma comment(lib, "opencv/opencv_legacy231.lib") //#pragma comment(lib, "opencv/opencv_ml231.lib") #pragma comment(lib, "opencv/opencv_objdetect231.lib") //#pragma comment(lib, "opencv/opencv_ts231.lib") //#pragma comment(lib, "opencv/opencv_video231.lib")