web-dev-qa-db-ja.com

Visual Studio 2010用のOpenCV-2.3のセットアップ

Visual Studio 2010 Expressでopencv 2.3を使用しようとしています。私のコードは例からです:

#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\binbuild\{x86|x64}\{vc9\vc10\mingw}\binの1つをシステムパスに追加しました(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がありません。 CMakeソフトウェアを使用せずに、OpenCV-2.3.0-win-superpack.exeのみを解凍しました。

私は何を間違えていますか?

36
Elfoc

さて、 公式ガイド はVS2010にOpenCV 2.1をインストールするためのものなので、以下にいくつかの手順を書きましたx86バージョンのOpenCV 2.3Visual Studio 2010(Express)。多くの人が正しく設定するのに問題があるようです。

OpenCV-2.3.0-win-superpack.exe をダウンロードして実行し、OpenCV2.3という名前のフォルダーにすべてのファイルを抽出します。このフォルダー内には、buildopencvの2つのディレクトリがあります。 VS2010のすべてのセットアップは、buildディレクトリを参照します。実際には、フォルダーOpenCV2.3C:\ドライブに移動したので、このガイドで提案するパスが異なる可能性があるので注意してください。

Visual Studioで、新しいWin32 Console Applicationプロジェクトを作成し、好きな名前を付けます。その後、新しいウィンドウが表示されます。タブApplication Settingsをクリックし、オプションEmpty Projectが選択されていることを確認します。

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)に移動し、新しいウィンドウが表示されたら次の操作を行います。

  • Configurationボックスで、All Configurationsを選択します

  • Configuration Properties> C/C++> Generalを開き、フィールドAdditional Include Directoriesを編集してこれらの3つのパスを追加します(ヘッダー用) ):

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

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

    C:\OpenCV2.3\build\include

enter image description here

include\opencvはOpenCVのCインターフェイス用であり、C++インターフェイスの場合はinclude\opencv2であることに注意してください。また、フォルダーincludeを追加して、C++ヘッダーをopencv2\coreとして参照するCインターフェイスのヘッダーによってビルドが破損しないようにします。

  • 次に、Configuration Properties> Linker> Generalにライブラリのパスを追加し、Additional Library Directoriesフィールドにこれを追加します:C:\OpenCV2.3\build\x86\vc9\lib

enter image description here

  • 最後に、この簡単なテストのために、ライブラリopencv_core230.libopencv_highgui230.libを追加します。 Configuration Properties> Linker> Inputに移動して追加します:

enter image description here

より複雑なアプリケーションを作成するときは、おそらくこの小さなプロジェクトで言及しなかった他のOpenCVライブラリを追加する必要があります。

F7を押してBuild Solutionにすると、以下が表示されます。

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

アプリケーションを実行できるようにするには、システムの [〜#〜] path [〜#〜]環境変数 を変更する必要があります。 OpenCVのDLLの場所を追加します。これをPATHの最後に追加します。

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

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が見つからないというエラーメッセージが表示された場合は、上記の場所(binフォルダーから)そして、プロジェクトのDebugフォルダーにコピーします。

お役に立てれば..

3
pimmes111

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")
1
rossb83