13

ここの指示に従って、macports で opencv をインストールしました: Compile OpenCV (2.3.1+) for OS X Lion / Mountain Lion with Xcode

また、stackexchange と google でこれの他のすべてのバリエーションを検索して試しましたが、これが最も近いようです。

いくつかの場合は機能するようですが、2.4.2 に同梱されているサンプル コードでは機能しません。すべての opencv 2.4.2 dylibs Link Binary with Libraries を追加したことに注意してください。

たとえば、次のようにコンパイルして実行します。

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

int main ( int argc, char **argv )
{
    cvNamedWindow( "My Window", 1 );
    IplImage *img = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 );
    CvFont font;
    double hScale = 1.0;
    double vScale = 1.0;
    int lineWidth = 1;
    cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC,
           hScale, vScale, 0, lineWidth );
    cvPutText( img, "Hello World!", cvPoint( 200, 400 ), &font,
          cvScalar( 255, 255, 0 ) );
    cvShowImage( "My Window", img );
    cvWaitKey();
    return 0;
}

ただし、次のように、display_image.cpp などのサンプルをビルドしようとすると、リンク エラーが発生します。

-動作しません-

 #include <stdio.h>
 #include <iostream>
 #include "opencv2/imgproc/imgproc.hpp"
 #include "opencv2/highgui/highgui.hpp"
 #include "opencv2/flann/miniflann.hpp"

 using namespace cv; // all the new API is put into "cv" namespace. Export its content
 using namespace std;
 using namespace cv::flann;

static void help()
{
    cout <<
    "\nThis program shows how to use cv::Mat and IplImages converting back and forth.\n"
    "It shows reading of images, converting to planes and merging back, color conversion\n"
    "and also iterating through pixels.\n"
    "Call:\n"
    "./image [image-name Default: lena.jpg]\n" << endl;
}

int main(int argc, char *argv[])
{
    help();
    const char* imagename = argc > 1 ? argv[1] : "lena.jpg";
    Mat img = imread(imagename); // the newer cvLoadImage alternative, MATLAB-style function
    if(img.empty())
    {
        fprintf(stderr, "Can not load image %s\n", imagename);
        return -1;
    }
    if( !img.data ) // check if the image has been loaded properly
        return -1;

    Mat img_yuv;
    cvtColor(img, img_yuv, CV_BGR2YCrCb); // convert image to YUV color space. The output image will be created automatically

    vector<Mat> planes; // Vector is template vector class, similar to STL's vector. It can store matrices too.
    split(img_yuv, planes); // split the image into separate color planes

    imshow("image with grain", img);

    waitKey();

    return 0;

}

次のエラーが表示されます。

Undefined symbols for architecture x86_64:
 "cv::split(cv::Mat const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&)", referenced from:
  _main in main1.o
 "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
  _main in main1.o
 "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from:
  _main in main1.o
 ld: symbol(s) not found for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

これを解決する方法はありますか?

4

3 に答える 3

42

私も同じ問題を抱えていました。Xcode 4.5 ではビルド設定のデフォルトが異なるようです。

「ビルド設定」の下 --> Apple LLVM コンパイラ 4.1 - 言語 >

C++ 標準ライブラリ:= libc++ (LLVM ...) からlibstdc++ (GNU C++ ...)に 変更します。

于 2012-10-12T05:38:56.497 に答える
4

プログラムは C++11 の設定でコンパイルされていますが、OpenCV は C++11 の設定でコンパイルされていない可能性が非常に高いです。C++11 スイッチを使用せずにツールのビルドを設定します (つまり、-std=c++11 -stdlib=libc++)。

于 2013-01-24T21:23:38.277 に答える
0

ポートがすべてのdylibを配置するディレクトリを手動で追加してみてください(/opt/local/lib私が間違っていなければ)ビルド設定 - >ライブラリ検索パス。これにより、リンクの問題が修正されます。

于 2012-10-07T16:08:56.130 に答える