Настройка OpenCV-2.3 для Visual Studio 2010
Я пытаюсь использовать OpenCV 2.3 с Visual Studio 2010 Express. Мой код из примера:
#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;
}
Что я сделал до сих пор?
- добавленной
build\bin
и один изbuild\{x86|x64}\{vc9\vc10\mingw}\bin
на мой системный путь (для использования DLL). - добавленной
build\{x86|x64}\{vc9\vc10\mingw}\lib
или жеbuild\{x86|x64}\{vc9\vc10\mingw}\staticlib
в качестве библиотечных каталогов для моих настроек компоновщика. - добавленной
build\include
а такжеbuild\include\opencv
как включить каталоги в настройках моего компилятора.
И результат:
1> ССЫЛКА: фатальная ошибка LNK1104: невозможно открыть файл 'c:\OpenCV2.3\build\x86\vc10\lib.obj'
Нет никаких lib.obj
в папках OpenCV. Я только разархивировал OpenCV-2.3.0-win-superpack.exe
без использования программного обеспечения CMake.
Что я делаю неправильно?
3 ответа
Официальное руководство предназначено для установки OpenCV 2.1 на VS2010, поэтому ниже я написал несколько инструкций, в которых показано, как правильно установить и настроить версию OpenCV 2.3 для x86 в Visual Studio 2010 (Express), поскольку у многих людей возникают проблемы. настроить его правильно.
Загрузите OpenCV-2.3.0-win-superpack.exe и выполните его, чтобы извлечь все файлы в папку с именем OpenCV2.3
, Внутри этой папки есть 2 каталога: build
а также opencv
, Все настройки VS2010 будут относиться к build
каталог. Для практических целей я переместил папку OpenCV2.3
к моему C:\
диск, поэтому обратите внимание на пути, которые я предлагаю в этом руководстве, поскольку у вас могут быть разные.
В Visual Studio создайте новый проект консольного приложения Win32 и назовите его как хотите. После этого появится новое окно. Нажмите на вкладку " Настройки приложения" и убедитесь, что выбрана опция " Пустой проект":
Добавить новый файл main.cpp
в папку Source Files
затем добавьте этот код в 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;
}
На этом этапе нам нужно настроить проект, чтобы он мог найти заголовки и библиотеки OpenCV. Перейдите в Свойства проекта (ALT + F7), и после появления нового окна сделайте следующее:
В поле " Конфигурация" выберите " Все конфигурации".
Откройте " Свойства конфигурации"> "C/C++"> "Общие" и отредактируйте поле " Дополнительные каталоги включения", чтобы добавить эти 3 пути (для заголовков):
C:\OpenCV2.3\build\include\opencv
C:\OpenCV2.3\build\include\opencv2
C:\OpenCV2.3\build\include
Обратите внимание, что include\opencv
для интерфейса C OpenCV и include\opencv2
если для интерфейса C++. Мы также добавляем папку include
чтобы предотвратить повреждение нашей сборки некоторыми заголовками интерфейса C, которые ссылаются на заголовки C++ как opencv2\core
,
- Затем добавьте путь к библиотекам в Свойства конфигурации> Компоновщик> Общие, а в поле Дополнительные каталоги библиотек добавьте следующее:
C:\OpenCV2.3\build\x86\vc9\lib
:
- Наконец, для этого простого теста мы собираемся добавить библиотеки
opencv_core230.lib
а такжеopencv_highgui230.lib
, Перейдите в " Свойства конфигурации"> "Линкер"> "Ввод" и добавьте их:
При написании более сложных приложений вам, вероятно, потребуется добавить другие библиотеки OpenCV, которые я не упомянул в этом нашем небольшом проекте.
Нажмите F7, чтобы построить решение, и вы должны увидеть:
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Чтобы иметь возможность выполнить приложение, вам нужно изменить переменную среды PATH в вашей системе, чтобы добавить расположение библиотек DLL OpenCV. Добавьте это к концу пути:
; C:\OpenCV2.3\build\x86\vc9\bin
Если вам сложно редактировать переменные среды PATH, вы также можете скопировать необходимые DLL-файлы в папку вашего проекта:DLL-файлы находятся в этой папке../OpenCV2.3/build.x86/vc9/bin
Затем скопируйте их в папку, в которой создается файл.exe:c: \ Users \ PIMMES \ Documents \ Visual Studio 2010 \ Projects \ eigenfaces \ Debug (Конечно, вы должны изменить путь к папке Debug)
Вам нужно только скопировать DLL-файлы, которые вы используете в своем проекте (например, #include). Например, если вы получаете сообщение об ошибке, в котором говорится, что opencv_core231d.dll не найден, получите этот DLL-файл из указанного выше места (папка bin) и скопируйте в папку проекта Debug.
Надеюсь это поможет..
Всякий раз, когда я делаю программу, которая использует opencv 2.2 или выше, я включаю все, а затем закомментирую библиотеки, которые мне не нужны. Попробуйте это, я уверен, что вам нужно больше, чем 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")