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?
build\bin
et l'un des build\{x86|x64}\{vc9\vc10\mingw}\bin
à mon chemin système (pour utiliser les DLL).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.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?
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:
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
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
.
C:\OpenCV2.3\build\x86\vc9\lib
:opencv_core230.lib
et opencv_highgui230.lib
. Allez donc dans Propriétés de configuration> Linker> Input et ajoutez-les: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
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..
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")