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

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

Что я делаю неправильно?

Ответ 1

Ну, официальное руководство предназначено для установки 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 Console Application и назовите его как хотите. После этого появится новое окно. Перейдите на вкладку Настройки приложения и убедитесь, что выбрана опция Пустой проект:

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/С++ > Общие и отредактируйте поле Дополнительные каталоги Include, чтобы добавить эти 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, если для интерфейса С++. Мы также добавляем папку include, чтобы наша сборка не была разбита некоторыми заголовками интерфейса C, которые ссылаются на заголовки С++ как opencv2\core.

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

enter image description here

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

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

Ответ 2

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

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

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

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

Ответ 3

Всякий раз, когда я создаю программу, использующую 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")