1

私は2つのファイルを持っています:

test.cpp :

#include "highgui.h"
#include <cv.h>
int main( int argc, char** argv ) {
    IplImage* img = cvLoadImage( argv[1] );
    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
    cvShowImage( "Example1", img );
    cvWaitKey(0);
    cvReleaseImage( &img );
    cvDestroyWindow( "Example1" );
}

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
set(CMAKE_MODULE_PATH ${/home/jinder1s/Documents/project/opencv/FindOpenCV.make} )
project(hello)
Find_package (OpenCV REQUIRED)
if(OpenCV_FOUND)
    add_executable (Hello test.cpp)
    find_library(Opencv_lib 
    NAMES opencv_core opencv_highgui opencv_imgproc
    PATHS /usr/local/lib)
endif()

これは私が得たもののテンプレートです。

jinder1s@jinder1s-lat-lap:~/Documents/project/opencv/tests$ cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jinder1s/Documents/project/opencv/tests
jinder1s@jinder1s-lat-lap:~/Documents/project/opencv/tests$ make
Linking CXX executable Hello
CMakeFiles/Hello.dir/test.cpp.o: In function `main':
test.cpp:(.text+0x1d): undefined reference to `cvLoadImage'
test.cpp:(.text+0x35): undefined reference to `cvNamedWindow'
test.cpp:(.text+0x49): undefined reference to `cvShowImage'
test.cpp:(.text+0x55): undefined reference to `cvWaitKey'
test.cpp:(.text+0x61): undefined reference to `cvReleaseImage'
test.cpp:(.text+0x6d): undefined reference to `cvDestroyWindow'
collect2: error: ld returned 1 exit status
make[2]: *** [Hello] Error 1
make[1]: *** [CMakeFiles/Hello.dir/all] Error 2
make: *** [all] Error 2

これは私の最初のコードであるため、opencvの学習を開始したばかりで、動作させることができないようです。私は本当にここでいくつかの助けを借りることができました. 私が間違っていることはわかりません。

4

2 に答える 2

3

ライブラリが利用可能であることを確認した後、ライブラリとリンクするようにcmakeに指示する必要があります。

target_link_libraries( Hello ${OpenCV_LIBS} )endif() の直前のようなもの

CMake の使用方法についてはhttp://www.cmake.org/cmake/help/cmake_tutorial.htmlを参照してください。openCVを使用した CMake についてはhttp://docs.opencv.org/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.htmlを参照してください。 .

「make VERBOSE=1」と入力すると、リンカーがどのように呼び出されるかを確認できます。cmake ファイルのデバッグに役立ちます。

于 2013-06-29T21:25:47.113 に答える
0

そこで名前空間を指定する必要があると思います。したがって、using namespace cv;アップトップを実行するかcv::function_name、すべての関数呼び出しに対して実行します。

また、これは OpenCV 1.x コードのように見えます。OpenCV 2.x 構文を使用する代わりにそれを行う理由はありますか? 2.x の方がはるかに安定しており、直感的です。たとえば、画像の読み込み行はMat img = imread(filename);2.xにあるだけです。そして、2.x の場合は#include "opencv2/core/core.hpp"、さらにusing namespace cv;上が必要です。

このチートシートが役立つ場合があります。

于 2013-06-29T21:47:23.723 に答える