web-dev-qa-db-fra.com

Configurer OpenCV-2.3 pour Visual Studio 2010

J'essaie d'utiliser opencv 2.3 avec Visual Studio 2010 Express. Mon code est d'un exemple:

#include "stdafx.h"
#include <highgui.h>

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

Qu'ai-je fait jusqu'à présent?

  • Ajoutée build\bin et l'un des build\{x86|x64}\{vc9\vc10\mingw}\bin à mon chemin système (pour utiliser les DLL).
  • Ajoutée build\{x86|x64}\{vc9\vc10\mingw}\lib ou build\{x86|x64}\{vc9\vc10\mingw}\staticlib en tant que répertoires de bibliothèque dans mes paramètres de l'éditeur de liens.
  • Ajoutée build\include et build\include\opencv comme répertoires inclus dans mes paramètres de compilation.

Et le résultat est:

1> LINK: erreur fatale LNK1104: impossible d'ouvrir le fichier 'c:\OpenCV2.3\build\x86\vc10\lib.obj'

Il n'y a pas lib.obj dans les dossiers OpenCV. J'ai seulement décompressé OpenCV-2.3.0-win-superpack.exe, sans utiliser le logiciel CMake.

Qu'est-ce que je fais mal?

36
Elfoc

Eh bien, le guide officiel est pour l'installation OpenCV 2.1 sur VS2010, j'ai donc écrit quelques instructions ci-dessous qui montrent comment installer et configurer correctement le - x86 version de OpenCV 2. sur Visual Studio 201 (Express), car beaucoup de gens semblent avoir des problèmes pour le configurer correctement.

Téléchargez OpenCV-2.3.0-win-superpack.exe et exécutez-le pour extraire tous les fichiers dans un dossier nommé OpenCV2.3. Dans ce dossier, il y a 2 répertoires: build et opencv. Toute la configuration sur VS2010 se référera au répertoire build. Pour des raisons pratiques, j'ai déplacé le dossier OpenCV2.3 à mon C:\ conduisez, alors faites attention aux chemins que je suggère dans ce guide car les vôtres peuvent être différents.

Sur Visual Studio, créez un nouveau projet Application console Win32 et nommez-le comme vous le souhaitez. Après cela, une nouvelle fenêtre apparaîtra. Cliquez sur l'onglet Paramètres d'application et assurez-vous que l'option Projet vide est sélectionnée:

enter image description here

Ajouter un nouveau fichier main.cpp dans le dossier Source Files, puis ajoutez ce code à main.cpp:

#include <stdio.h>
#include <cv.h>
#include <highgui.h>

int main(int argc, char* argv[])
{
if (argc < 2)
{
    printf("Usage: ./opencv_hello <file.png>\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;
}

À ce stade, nous devons configurer le projet afin qu'il puisse localiser les en-têtes et les bibliothèques OpenCV. Allez dans les propriétés du projet (ALT + F7), et une fois que la nouvelle fenêtre apparaît, procédez comme suit:

  • Dans la zone Configuration, sélectionnez Toutes les configurations

  • Ouvrez Propriétés de configuration> C/C++> Général, et modifiez le champ Additional Include Directories pour ajouter ces 3 chemins (pour les en-têtes):

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

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

    C:\OpenCV2.3\build\include

enter image description here

Notez que include\opencv est pour l'interface C d'OpenCV et include\opencv2 si pour l'interface C++. Nous ajoutons également le dossier include pour éviter que notre build ne soit interrompu par certains en-têtes de l'interface C qui se réfèrent aux en-têtes C++ par opencv2\core.

  • Ensuite, ajoutez le chemin des bibliothèques sur Propriétés de configuration> Éditeur de liens> Général et dans le champ Répertoires de bibliothèques supplémentaires, ajoutez ceci: C:\OpenCV2.3\build\x86\vc9\lib:

enter image description here

  • Enfin, pour ce test simple, nous allons ajouter les bibliothèques opencv_core230.lib et opencv_highgui230.lib. Allez donc dans Propriétés de configuration> Linker> Input ​​et ajoutez-les:

enter image description here

Lors de l'écriture d'applications plus complexes, vous devrez probablement ajouter d'autres bibliothèques OpenCV que je n'ai pas mentionnées sur ce petit projet qui est le nôtre.

Appuyez sur F7 to Build Solution et vous devriez voir:

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

Pour pouvoir exécuter l'application, vous devrez modifier la variable d'environnement de votre système pour ajouter l'emplacement des OpenCV DLL. Ajoutez ceci à la fin de PATH:

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

Si vous avez du mal à modifier les variables d'environnement PATH, vous pouvez également copier les fichiers .dll requis dans votre dossier de projet: Les fichiers dll se trouvent dans ce dossier ../OpenCV2.3/build.x86/vc9/ bin

Ensuite, copiez-les dans le dossier où le fichier .exe est créé: c:\Users\PIMMES\Documents\Visual Studio 2010\Projects\eigenfaces\Debug (Bien sûr, vous devez changer le chemin d'accès à votre dossier Debug )

Il vous suffit de copier les fichiers .dll que vous utilisez dans votre projet (#include par exemple) Par exemple, si vous obtenez un message d'erreur indiquant que opencv_core231d.dll est introuvable, récupérez ce fichier .dll à partir de l'emplacement ci-dessus (dossier bin ) et copiez-le dans le dossier de débogage de votre projet.

J'espère que cela t'aides..

3
pimmes111

Chaque fois que je crée un programme qui utilise opencv 2.2 ou supérieur, j'inclus tout, puis je commente les bibliothèques dont je n'ai pas besoin. Essayez ceci, je suis sûr que vous avez besoin de plus 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")
1
rossb83