Настройка OpenCV-2.3 для Visual Studio 2010 - PullRequest
36 голосов
/ 10 августа 2011

Я пытаюсь использовать 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> LINK: фатальная ошибка LNK1104: невозможно открыть файл 'c: \ OpenCV2.3 \ build \ x86 \ vc10 \ lib.obj'

В папках OpenCV нет lib.obj.Я только распаковал OpenCV-2.3.0-win-superpack.exe, без использования программного обеспечения CMake.

Что я делаю не так?

Ответы [ 3 ]

93 голосов
/ 10 августа 2011

Ну, официальное руководство предназначено для установки OpenCV 2.1 на VS2010, поэтому ниже я написал несколько инструкций, которые показывают, как правильно установить и настроить x86 версия OpenCV 2.3 в Visual Studio 2010 (Express), поскольку у многих людей возникают проблемы с его правильной настройкой.

Скачать OpenCV-2.3.0-win-superpack.exe и выполнить его, чтобы извлечь все файлы в папку с именем OpenCV2.3. Внутри этой папки есть 2 каталога: build и opencv. Все настройки VS2010 будут относиться к каталогу build. В практических целях я переместил папку OpenCV2.3 на диск C:\, поэтому обратите внимание на пути, которые я предлагаю в этом руководстве, поскольку у вас могут быть другие.

В Visual Studio создайте новый проект консольного приложения Win32 и назовите его как хотите. После этого появится новое окно. Нажмите на вкладку Настройки приложения и убедитесь, что выбрана опция Пустой проект :

enter image description here

Добавьте новый файл 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

enter image description here

Обратите внимание, что include\opencv для интерфейса C OpenCV и include\opencv2 для интерфейса C ++. Мы также добавляем папку include, чтобы предотвратить повреждение нашей сборки некоторыми заголовками интерфейса C, которые ссылаются на заголовки C ++ как opencv2\core.

  • Затем добавьте путь к библиотекам в Свойства конфигурации> Linker> General и в поле Дополнительные каталоги библиотек добавьте это: C:\OpenCV2.3\build\x86\vc9\lib:

enter image description here

  • Наконец, для этого простого теста мы добавим библиотеки opencv_core230.lib и opencv_highgui230.lib. Перейдите к Свойства конфигурации> Linker> Input и добавьте их:

enter image description here

При написании более сложных приложений вам, вероятно, потребуется добавить другие библиотеки OpenCV, которые я не делал упоминается в нашем маленьком проекте.

Нажмите F7 до Постройте решение , и вы должны увидеть:

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

Чтобы иметь возможность выполнить приложение, вам нужно изменить переменную окружения PATH вашей системы, чтобы добавить местоположение библиотек DLL OpenCV. Добавьте это в конец PATH:

; C:\OpenCV2.3\build\x86\vc9\bin
3 голосов
/ 10 апреля 2012

Если вам сложно редактировать переменные среды PATH, вы также можете скопировать необходимые DLL-файлы в папку вашего проекта: Файлы dll находятся в этой папке ../OpenCV2.3/build.x86/vc9/bin

Затем скопируйте их в папку, где создается файл .exe: c: \ Users \ PIMMES \ Documents \ Visual Studio 2010 \ Projects \ eigenfaces \ Debug (Конечно, вы должны изменить путь к папке отладки)

Вам нужно только скопировать DLL-файлы, которые вы используете в своем проекте (например, #include). Например, если вы получаете сообщение об ошибке, в котором говорится, что opencv_core231d.dll не найден, получите этот DLL-файл из вышеуказанного расположения (папка bin) и скопируйте в папку проекта Debug.

Надеюсь, это поможет ..

1 голос
/ 10 августа 2011

Всякий раз, когда я делаю программу, которая использует 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...