web-dev-qa-db-ja.com

C ++でopencvをコンパイルする

インポートのみのファイルがあります:

#include <iostream>
#include <stdio.h>

#include "cxcore.hpp"
#include "highgui.hpp"

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{

}

そして、私はg ++ -I/usr/include/opencv -lopencv -lm m.cppでコンパイルしようとします

しかし、聖霊降臨祭のエラーが発生します:

/usr/include/opencv/cxcore.hpp:46からインクルードされたファイル、m.cpp:5から:/usr/include/opencv/cxmisc.h:214:エラー:予期されるコンストラクター、デストラクター、または 'void前の型変換'/usr/include/opencv/cxmisc.h:220:エラー:' int 'の前にコンストラクタ、デストラクタ、または型変換が必要です/usr/include/opencv/cxmisc.h:226:エラー:' CV_INLINE 'は名前を付けませんタイプ/usr/include/opencv/cxmisc.h:516:エラー: 'CV_DEPTH_MAX'はこのスコープで宣言されていません/usr/include/opencv/cxmisc.h:522:エラー: 'CV_DEPTH_MAX'はこのスコープで宣言されていません/ usr/include/opencv/cxmisc.h:522:エラー: 'CV_CN_MAX'はこのスコープで宣言されませんでしたm.cpp:5からインクルードされたファイル:/usr/include/opencv/cxcore.hpp:70:エラー:テンプレート宣言'cv :: CV_EXPORTS cv :: Size_'の/usr/include/opencv/cxcore.hpp:71:エラー: 'cv :: CV_EXPORTS cv :: Point_'のテンプレート宣言/usr/include/opencv/cxcore.hpp: 72:エラー: 'cv :: CV_EXPORTS cv :: Rect_'のテンプレート宣言/usr/include/opencv/cxcore.hpp:77:エラー: 'fromUtf16'の前に初期化子が必要/usr/include/opencv/cxcore.hpp:78:エラー: 'toUtf16'の前に初期化子が必要/usr/include/opencv/cxcore.hpp:80:エラー: 'format'の前に初期化子が必要/usr/include/opencv/cxcore.hpp:82:エラー: ':'トークンの前に初期化子が必要ですm.cpp:38:エラー:入力の最後に '}'が必要です

これは私のcopencv libコンテンツです:

alberto@zefiro:~$ ls /usr/include/opencv/
cvaux.h    cvcompat.h  cv.hpp        cvtypes.h  cvvidsurv.hpp  cxcore.h    cxerror.h  cxmat.hpp  cxoperations.hpp  highgui.h    ml.h
cvaux.hpp  cv.h        cvinternal.h  cvver.h    cvwimage.h     cxcore.hpp  cxflann.h  cxmisc.h   cxtypes.h         highgui.hpp

私はubuntu 10.10にいます

20
nkint

ヘッダー-I(大文字のi)とライブラリ-l(小文字のL)を適切に含める必要があります。

最新のOpenCVバージョンでは、次のことを行う必要があります。

#include <cv.h>
#include <highgui.h>

そして、それを使ってコンパイルしてみてください:

g++ m.cpp -o app `pkg-config --cflags --libs opencv`

注:コマンドラインでpkg-config --cflags --libs opencvのみを実行すると、g ++コマンドラインに含める必要があるパスとライブラリが表示されます。

52
karlphillip

開発環境にpkg-configがなく、そのため karlphilipが受け入れた回答 が実用的でない場合、またはアプリケーションをリンクするために必要なライブラリの最小限のセットを知る必要がある場合、などのコードを想定

#include <cv.h>
#include <highgui.h>

int main()
{
    return 0;
}

必要な最小限の引数セットが見つかるまで、次のリストからライブラリ引数を上から順に追加できます。

 -lopencv_core 
 -lopencv_imgproc 
 -lopencv_highgui 
 -lopencv_ml 
 -lopencv_video 
 -lopencv_features2d 
 -lopencv_calib3d 
 -lopencv_objdetect 
 -lopencv_contrib 
 -lopencv_legacy 
 -lopencv_flann 

たとえば、この投稿の上部にリストされているCソースコードは、

gcc hello.c -o hello \
    -I /usr/include/opencv \
    -L /usr/lib \
    -lopencv_core \
    -lopencv_imgproc

私の古いx86_64 Ubuntu 12.04ボックス。

次のようなC++コードを想定

#include "core/core.hpp"
#include "highgui/highgui.hpp"

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    return 0;
}

次に、コンパイルしてリンクします

g++ hello.cpp -o hello \
    -I /usr/include/opencv2 \
    -L /usr/lib \
    -lopencv_core \
    -lopencv_imgproc

CMakeを使用してOpenCVG++でコンパイルすることをお勧めします。この方法の方が適していると思います。

cmake_minimum_required(VERSION 3.1)
project(YOUR_PROJECT_NAME)

set(CMAKE_GXX_FLAGS "-Wall -Wextra -Wconversion  -pedantic -std=gnu11")

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(YOUR_EXCUTABLE YOUR_CODE_SOURCE_FILES)
target_link_libraries(YOUR_EXCUTABLE ${OpenCV_LIBS})
2
SenDjasni
  1. OpenCV フォルダーおよび install-opencv.sh スクリプトのソースファイルをダウンロードします。
  2. スクリプトファイルを実行すると、opencvに必要なファイルが自動的にインストールされます。次のコードを実行します。

    chmod +x install-opencv.sh
    ./install-opencv.sh
    

ライブラリの異なるバージョンをインストールする場合は、インストールスクリプト内のバージョンの最初の行を更新してください。詳細については、 this tutorialを使用してください。次の行でコンパイルします:

g++ `pkg-config --cflags opencv` example.cpp `pkg-config --libs opencv`
0